如何在一个语句中向SQL命令添加多个参数?

use*_*188 9 c# sql

我有六行参数,如下所示:

    cmd.Parameters.AddWithValue("@variable1", myvalue1);
    cmd.Parameters.AddWithValue("@variable2", myvalue2);
    cmd.Parameters.AddWithValue("@variable3", myvalue3);
Run Code Online (Sandbox Code Playgroud)

等等.

有没有办法在不直接插入cmd.CommandText的情况下压缩这一点?

编辑:我想我可以使用一个很好的老式阵列.我决定坚持这一点.

Ste*_*eve 9

据我所知,你的代码是尽可能紧凑的线条任期计算,但您可以使用List<SqlParameter>与对象初始化语法刚才用分号来建立你的参数列表终止一条线,然后通过该列表作为AddRange方法预期的参数数组

 List<SqlParameter> prm = new List<SqlParameter>()
 {
     new SqlParameter("@variable1", SqlDbType.Int) {Value = myValue1},
     new SqlParameter("@variable2", SqlDbType.NVarChar) {Value = myValue2},
     new SqlParameter("@variable3", SqlDbType.DateTime) {Value = myValue3},
 };
 cmd.Parameters.AddRange(prm.ToArray());
Run Code Online (Sandbox Code Playgroud)

请注意,使用此方法,您需要正确定义参数的数据类型.在我的示例中,我使用了一些任意类型来显示正确的语法

有点偏离主题,我认为在这个一般情况下有趣的是指出,AddWithValue当你想要获得最佳性能时不要考虑.

在MSDN上的这篇文章中,数据访问代码如何影响数据库性能,这很好地解释了为什么AddWithValue出于性能原因应该避免使用该方法的原因.
简而言之,使用AddWithValue可能是一个问题,Sql Server Optimizer因为string类型的参数的传递大小等于字符串的当前长度.但这将强制Sql Server Optimizer放弃为先前相同的调用创建的查询计划,但使用不同长度的字符串.
最好调用SqlParameter构造函数来指定参数的类型和大小,不要担心如何compress the size调用.

  • 我恐怕没有看到它比原始代码压缩得多. (2认同)

Lar*_*rry 6

我从字面上理解了这个问题:"...在一个声明中" :)

史蒂夫代码很好但是使用最规范的SqlParameter构造函数和隐式数组声明可以简化它:

cmd.Parameters.AddRange(new []
    {
        new SqlParameter("@variable1", myValue1),
        new SqlParameter("@variable2", myValue2),
        new SqlParameter("@variable3", myValue3),
    });
Run Code Online (Sandbox Code Playgroud)

  • 除非其中一个值是值为零的整数.请参阅http://stackoverflow.com/questions/9999751/difference-between-parameters-add-and-parameters-addwithvalue (2认同)