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

时间:2009-07-01 08:37:34

标签: stored-procedures

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

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

cmd.Parameters.Add(itemType);

存储过程在设计上有很多参数,设计无法更改。

我不希望有多个代码分页来创建参数。很难阅读/支持。当然我可以在这里使用区域,但问题是代码。

您有什么想法我如何改进我的代码?

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

你知道吗?

谢谢。

4 个答案:

答案 0 :(得分:0)

Erland Sommerkog的文章Arrays and Lists in SQL Server 2005“描述了许多不同的方法,包括好的和坏的。”

重复Since there is no Sqlserver array parameter, what’s the best way to proceed?

答案 1 :(得分:0)

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

像这样......

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

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

所以你可以有一个像AddIdParam(命令)的方法;

我希望我转达了我的观点。

答案 2 :(得分:0)

这是一种可以使用的更简洁的格式

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";

答案 3 :(得分:0)

另一种方法是使SqlCommand成为该类的成员字段,并有一个成员方法来初始化它。

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

要在代码中稍后使用SqlCommand,您可以这样做:

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