ここで明らかな何かが欠けているので、新しい視点が必要だと思います。
タイプ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;
}
それはこのように思える 〜すべき 動作するので、戻って実際に何が通過しているかを調査すると思います。多分私は配列の配列を渡すか、何か他の奇妙なことをしています。
回答:
回答№1は0それを見つけた。私は奇妙なことをしていました。
このようにリストとしてparameterValuesを送信していました。
CreateStoredProcedureCommand("spName", pContext.SqlParameters.Select(b=>b.Value).ToList())
それをToArray()に変更し、機能しました。