0

我在这里遗漏了一些明显的东西,我想我需要一个新的视角。

我正在传递对象 [] 类型的参数。我想提取数组中的元素并将其值分配给另一个变量,因为我正在循环另一个列表:

private void PopulateValues(List<SqlParameters> parameters, object[] parameterValues) {
   int index = 0;
   foreach(var parameter in parameters) {
      parameter.Value = parameterValues[index];
      index++;
   }

尽我所能,将 parameter.Value 设置为对象数组,而不是位置 i 处的对象值。

我在这里想念什么?除了通过索引/位置之外,还有其他方法可以获取对象数组中的对象值吗?

好的..这正是我正在做的。

protected SqlCommand CreateStoredProcedureCommand(string storedProcedureName, object[] parameterValues)
    {
        SqlCommand cmd = new SqlCommand(storedProcedureName, Connection)
                             {CommandTimeout = _commandTimeout, CommandType = CommandType.StoredProcedure};

        SqlCommandBuilder.DeriveParameters(cmd);
        int index = 0;

        foreach(SqlParameter parameter in cmd.Parameters)
        {
            if (parameter.Direction == ParameterDirection.Input || parameter.Direction == ParameterDirection.InputOutput)
            {
                parameter.Value = parameterValues[index]
                index++;
            }
        }

        return cmd;
    }

看起来这应该可行,所以我想我会回去调查我实际传递的内容。也许我正在传递一个数组数组或做其他奇怪的事情。

4

1 回答 1

0

找到了。我在做一些奇怪的事情。

我以这种方式将 parameterValues 作为列表发送:

CreateStoredProcedureCommand("spName", pContext.SqlParameters.Select(b=>b.Value).ToList())

将其更改为 ToArray() 并且它有效。

于 2012-10-31T20:17:45.673 回答