Stored procedures 使用多个参数调用存储过程的最佳代码是什么

Stored procedures 使用多个参数调用存储过程的最佳代码是什么,stored-procedures,Stored Procedures,我意识到我有一个非常大的方法,它创建SqlParameter对象并将它们添加到SqlCommand(cmd)中。例如: SqlParameter itemType = new SqlParameter { ParameterName = "ItemType", Direction = ParameterDirection.Input, SqlDbType = SqlDbType.Int, Value = (int)item.ItemType }; cmd.Par

我意识到我有一个非常大的方法,它创建SqlParameter对象并将它们添加到SqlCommand(cmd)中。例如:

SqlParameter itemType = new SqlParameter
{
    ParameterName = "ItemType",
    Direction = ParameterDirection.Input,
    SqlDbType = SqlDbType.Int,
    Value = (int)item.ItemType
};

cmd.Parameters.Add(itemType);
一个存储过程在设计上有很多参数,并且设计不能更改

我不喜欢用几页代码来创建参数。这很难理解/支持。当然我可以在这里使用区域,但问题是关于代码

你有什么想法可以改进我的代码吗

目前,我在这里只看到一种方法:我需要使用自定义属性为每个项属性指定参数名称、方向和db类型。在这种情况下,我需要使用反射,我不确定它是否是最佳选择

你觉得呢


谢谢。

Erland Sommerkog的文章“描述了许多不同的方法,包括好的和坏的。”


重复的

可能我理解错了您的问题,但为什么不将实例化参数的代码抽象出来,并将其添加到辅助函数的命令对象中呢

像这样的

AddSqlParam(“ParamName1”,SqlDbType.Int,val1,ParameterDirection.Input,command); AddSqlParam(“ParamName2”,SqlDbType.String,val2,ParameterDirection.Input,command)

您可以通过将常用参数转换成小的辅助函数来进一步重构它。 例如,大多数数据库都有一个ID列

所以你可以有一个像addParam(command)这样的方法


我希望我能表达我的观点。

这是一种更精简的格式,您可以使用

SqlCommand command = new SqlCommand();

command.Parameters.Add(new SqlParameter("@param1", SqlDbType.NVarChar, 255));
command.Parameters[command.Parameters.Count - 1].Value = "value1";

command.Parameters.Add(new SqlParameter("@param2", SqlDbType.NVarChar, 255));
command.Parameters[command.Parameters.Count - 1].Value = "value2";

command.Parameters.Add(new SqlParameter("@param3", SqlDbType.NVarChar, 255));
command.Parameters[command.Parameters.Count - 1].Value = "value3";

另一种方法是使SqlCommand成为类的成员字段,并使用成员方法对其进行初始化

这类似于VisualStudio在创建组件,然后将SqlCommand拖到设计图面上时生成的代码。如果使用参数化查询或带有参数的存储过程配置SqlCommand,则它将生成代码来创建SqlParameter对象并将其添加到parameters属性

要在以后的代码中使用该SqlCommand,可以执行以下操作:

m_Command.Parameters["@ParamName"].Value = value;