如果你想要一个通用样式函数,而不需要额外的往返,并且你很乐意使用反射,你可以使用这样的东西。
// Return an array of SqlParameter's by using reflection on ParamObject
private static SqlParameter[] GetParametersFromObject( object ParamObject )
{
    var Params = new List<SqlParameter>();
    foreach( var PropInfo in ParamObject.GetType().GetProperties() )
    {
        Params.Add( new SqlParameter( PropInfo.Name, PropInfo.GetValue( ParamObject, null ) ) );
    }
    return Params.ToArray();
}
public static void ExecuteSP( SqlConnection Connection, string SPName, object ParamObject )
{
    using( var Command = new SqlCommand() )
    {
        Command.Connection = Connection;
        Command.CommandType = CommandType.StoredProcedure;
        Command.CommandText = SPName;
        Command.Parameters.AddRange( GetParametersFromObject( ParamObject ) );
        // Command.ExecuteReader()...
    }
}
这使用反射从匿名对象中获取属性名称和值以填充 SqlCommand。可以这样使用;
ExecuteSP( Conn, "GetStuff", new { Id = 7, Name = "Test" } );
这种方式 ExecuteSP 是“通用的”,您可以在调用 ExecuteSP 时选择参数名称和值。