如何在C#中执行查询之前向SqlCommand添加参数集合?

时间:2017-07-04 10:03:04

标签: c# sqlcommand

我有这个代码,我想在SqlCommand中添加一组参数。

public void AddParameters(Dictionary<string, object> parameters)
{
    if (parameters == null)
        return;

    foreach(KeyValuePair<string, object> keyValue in parameters)
    {
        sqlCommand.Parameters.AddWithValue(keyValue.Key, keyValue.Value);
    }
}

我想在不使用循环的情况下提高效率,因为我可以拥有非常大的参数集合。有没有办法用一个函数添加整个集合?

3 个答案:

答案 0 :(得分:3)

&#34;优化&#34;的唯一方法那个场景是已经有一个DbCommand实例和正确的命令文本/类型,以及已经添加的参数,你只需在执行它之前依次设置每个.Value 。但是,如果您使用多个连接/线程,则需要仔细同步,因此需要仔细完成。最终,与在与数据库交谈的延迟相比,你在这里做的任何没有,因此:很可能这只是过早的优化和牦牛剃须 - 意思是:你可能觉得你已经在这里取得了一些有用的东西,但你真正做的就是花时间。

答案 1 :(得分:1)

我不喜欢几件事

  1. 为什么需要public方法将参数添加到私有SqlCommand,而私有AddWithValue根本不应该是一个字段,而应该在您使用它的地方创建。这太容易出错了。
  2. 你正在优化错误的东西。不要关心微秒,但代码安全。使用void AddParameters(params SqlParameter[] parameters) { if (parameters == null || parameters.Length == 0) return; sqlCommand.Parameters.AddRange(parameters); } 不安全并且可能导致性能(或其他)问题,因为参数的类型必须从值中派生
  3. 如果可以的话,你可以使用这样的方法,但收效甚微:

    params

    SqlParameter pararmeter = new SqlParameter("@Column", SqlDbType.Int); pararmeter.Value = 1234; AddParameters(pararmeter); 关键字允许以这种方式使用它:

    top[2] = 2

答案 2 :(得分:0)

您可以使用AddRange方法稍微改善性能:

 public void AddParameters(SqlParameter[]  parameters)
    {
        if (parameters == null)
            return;
        sqlCommand.Parameters.AddRange(parameters);

    }