是否可以在没有硬编码的情况下为SqlCommand
的所有参数传递值?
而不是:
mySqlCommand1.Parameters.AddWithValue("@Parameter1", "sameValue");
mySqlCommand2.Parameters.AddWithValue("@Parameter2", "sameValue");
mySqlCommand2.Parameters.AddWithValue("@Parameter2", "sameValue");
...
我想要这样的一些:
foreach (SqlParameter parameter in mySqlCommand1.Parameters)
{
parameter.Value = someValue;
}
但是我收到了一个错误:
过程或函数需要未提供的参数
答案 0 :(得分:1)
是的,您可以这样做 - 如果您首先将参数添加到.Parameters
集合中
mySqlCommand1.Parameters.Add("@Parameter1", SqlDbType.Int);
mySqlCommand1.Parameters.Add("@Parameter2", SqlDbType.VarChar, 50);
...
然后你可以迭代它们并分配值:
foreach (SqlParameter parameter in mySqlCommand1.Parameters)
{
parameter.Value = someValue;
}
如果你没有将这些参数添加到.Parameters
集合中,那么迭代并将值分配给.....
更新:如果您想避免@Parameter1
,请使用以下内容:
foreach (SqlParameter parameter in mySqlCommand1.Parameters)
{
if(parameter.ParameterName != "@Parameter1")
{
parameter.Value = someValue;
}
}
答案 1 :(得分:0)
这就是问题 - 价值确实变化了吗?
如果是,那么您可以更改您的程序,使其接受可选参数,如下例所示:
CREATE PROCEDURE MyProcName
@Parameter1 VARCHAR (100) = '1',
@Parameter2 VARCHAR (100) = 'StringValue',
@Parameter3 VARCHAR (100) = NULL
AS [...]
如果您实现可选参数,则无需提及任何其他值 - 可以假设默认值。这样,您的客户端代码就可以简化了。