0

ここには明らかな何かが欠けており、新しい視点が必要だと思います。

object[] 型のパラメータを渡しています。別のリストをループしているので、配列内の要素を抽出し、その値を別の変数に割り当てたいと思います。

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 に答える