我在这里遗漏了一些明显的东西,我认为我需要一个新的视角。
我传递的是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;
}
似乎这个应该工作,所以我想我会回去调查我实际传递的内容。也许我正在传递数组数组或做其他奇怪的事情。
答案 0 :(得分:0)
找到它。我做了一些奇怪的事。
我以这种方式将参数值作为列表发送:
CreateStoredProcedureCommand("spName", pContext.SqlParameters.Select(b=>b.Value).ToList())
将其更改为ToArray()并且有效。