Я обычно использую некоторые варианты следующего примера, в зависимости от среды, конечно:
Мои основные вспомогательные методы, которые я вызываю по всему коду
public static SqlCommand CreateStoredProcCmd(string name, SqlConnection con)
{
var cmd = new SqlCommand(name, con);
cmd.CommandType = CommandType.StoredProcedure;
return cmd;
}
public static void AddParams(this SqlCommand cmdObject, Params SqlParameter[] parameters)
{
foreach(SqlParameter param in parameters)
{
cmdObject.Parameters.add(param);
}
}
/* Any overloaded methods to create params receiving my param definitions
in any manner that the usual new SqlParameter() constructor doesn't handle */
public static SqlParameter CreateSqlParam(string ParamName,
SqlDbType ParamType,
object value)
{
return CreateSqlParam(ParamName, ParamType, ParameterDirection.Input, value);
}
public static SqlParameter CreateSqlParam(string ParamName,
SqlDbType ParamType,
ParameterDirection ParamDir)
{
return CreateSqlParam(ParamName, ParamType, ParamDir, null;
}
public static SqlParameter CreateSqlParam(string ParamName,
SqlDbType ParamType,
ParameterDirection ParamDir,
object value)
{
var parm = new SqlParameter(ParamName, ParamType);
parm.Direction = ParamDir;
parm.Value = value;
return parm;
}
Теперь вот как я настроил свои сохраненные процедуры и элегантно добавил все свои параметры
public static string DoStuff()
{
using (var oCon = new SqlConnection("MyConnectionString"))
{
oCon.Open();
var oCmd = CreateStoredProcCmd("sp_Name", oCon).AddParams(
CreateSqlParam("Param1", SqlDBType.Int, 3),
CreateSqlParam("Param2", SqlDBType.VarChar, "Hello World"),
CreateSqlParam("Param3", SqlDBType.VarChar, ParameterDirection.Output)
);
oCmd.Prepare();
oCmd.ExecuteNonQuery();
object outVal = oCmd.Parameters["Param3"];
return null != outVal ? outVal.ToString() : String.Empty;
}
}