我有六行参数,如下所示:
cmd.Parameters.AddWithValue("@variable1", myvalue1);
cmd.Parameters.AddWithValue("@variable2", myvalue2);
cmd.Parameters.AddWithValue("@variable3", myvalue3);
Run Code Online (Sandbox Code Playgroud)
等等.
有没有办法在不直接插入cmd.CommandText的情况下压缩这一点?
编辑:我想我可以使用一个很好的老式阵列.我决定坚持这一点.
据我所知,你的代码是尽可能紧凑的线条任期计算,但您可以使用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调用.
我从字面上理解了这个问题:"...在一个声明中" :)
史蒂夫代码很好但是使用最规范的SqlParameter构造函数和隐式数组声明可以简化它:
cmd.Parameters.AddRange(new []
{
new SqlParameter("@variable1", myValue1),
new SqlParameter("@variable2", myValue2),
new SqlParameter("@variable3", myValue3),
});
Run Code Online (Sandbox Code Playgroud)