声明动态SqlParameter变量(C#)

时间:2017-02-23 18:21:45

标签: c# arrays

我正在尝试创建一个循环,根据数组的长度创建动态SqlParameter变量。这是我尝试过的伪代码:

for(i=0; i < array.length; i++)
{
    SqlParameter [new variable name] = new SqlParameter;
    [new variable name] = da.SelectCommand.CreateParameter();
    [new variable name].ParameterName = paramName[i]; 
    [new variable name].Value = array[i];
    da.SelectCommand.Parameters.Add([new variable name]);
}

这样做的原因是创建一个方法来检索数据集,其中方法将调用数据集检索方法,以便传递两个数组(不使用多维数组),其中循环将确定数组的长度,以便在将多个新SqlParameter变量发送到存储过程之前创建它们。

我一直遇到两个错误 - 一个无法创建多个SqlParameter变量,另一个错误是索引超出数组边界。

使用一种方法通过存储过程从数据库中检索数据集是否有更好的方法来创建动态SqlParameter变量?

我在VB代码中有一个例子:

prmLicense = da.SelectCommand.CreateParameter
  prmLicense.ParameterName = "@LicensePlate"
  prmLicense.Value = license

  prmState = da.SelectCommand.CreateParameter
  prmState.ParameterName = "@StateIssued"
  prmState.Value = state

  da.SelectCommand.Parameters.Add(prmLicense)
  da.SelectCommand.Parameters.Add(prmState)

这就是为什么我不想像上面那样创建一个长方法并希望将循环用于上面这样的东西的原因。

1 个答案:

答案 0 :(得分:1)

您不需要动态参数名称 - 该参数只会在循环范围内重复使用:

    var dict = new Dictionary<Tuple<string,int>, int>();
    dict.Add(Tuple.Create("a", 123), 19);
    dict.Add(Tuple.Create("a", 456), 12);
    dict.Add(Tuple.Create("a", 789), 13);
    dict.Add(Tuple.Create("b", 998), 99);
    dict.Add(Tuple.Create("b", 999), 11);

    var d = dict.aggregateBy(p => p.Key.Item1, p => p.Value, Math.Min);

    Debug.Print(string.Join(", ", d));        // "[a, 12], [b, 11]"