如果你想要一个通用样式函数,而不需要额外的往返,并且你很乐意使用反射,你可以使用这样的东西。
// 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 时选择参数名称和值。