1

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

但我收到一个错误:

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

4

2 回答 2

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;  
    }
} 
于 2013-08-17T19:33:51.697 回答
0

这就产生了一个问题——这些价值观真的不同吗?

  • 如果他们不这样做,那么也许您可以将存储过程更改为只接受一个参数,然后在内部传播它。
  • 如果是这样,那么您可以更改您的过程以使其接受可选参数,例如以下示例:

    CREATE PROCEDURE MyProcName
        @Parameter1 VARCHAR (100) = '1',
        @Parameter2 VARCHAR (100) = 'StringValue',
        @Parameter3 VARCHAR (100) = NULL
    AS [...]
    

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

于 2013-08-17T19:00:41.513 回答