在所有参数上传递相同的值?

时间:2013-08-17 18:35:23

标签: c# parameter-passing sqlcommand

是否可以在没有硬编码的情况下为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;  
}

但是我收到了一个错误:

  

过程或函数需要未提供的参数

2 个答案:

答案 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 [...]
    

如果您实现可选参数,则无需提及任何其他值 - 可以假设默认值。这样,您的客户端代码就可以简化了。