Brakuje mi tutaj czegoś oczywistego i myślę, że potrzebuję nowej perspektywy.
Podaję parametr typu obiekt []. Chcę wyodrębnić element z tablicy i przypisać jego wartość innej zmiennej, ponieważ zapętlam inną listę:
private void PopulateValues(List<SqlParameters> parameters, object[] parameterValues) {
int index = 0;
foreach(var parameter in parameters) {
parameter.Value = parameterValues[index];
index++;
}
Spróbuj, jak mogę, parametr.Value jest ustawiony na tablicę obiektów, a nie na wartość obiektu w pozycji i.
Czego tu brakuje? Czy istnieje inny sposób na uzyskanie wartości obiektu w tablicy obiektów niż przez indeks / pozycję?
Okej, oto dokładnie to, co robię.
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;
}
Wygląda na to powinien pracować, więc myślę, że wrócę i zbadam, co właściwie mijam. Może przekazuję tablicę tablic lub robię coś dziwnego.
Odpowiedzi:
0 dla odpowiedzi № 1Znaleziono to. Robiłem coś dziwnego.
W ten sposób przesyłałem parametr Values jako listę:
CreateStoredProcedureCommand("spName", pContext.SqlParameters.Select(b=>b.Value).ToList())
Zmieniłem to na ToArray () i zadziałało.