Il me manque quelque chose d’évident, et j’ai besoin d’une nouvelle perspective.
Je passe un paramètre de type objet []. Je souhaite extraire l’élément du tableau et affecter sa valeur à une autre variable, dans la mesure où je parcours une autre liste:
private void PopulateValues(List<SqlParameters> parameters, object[] parameterValues) {
int index = 0;
foreach(var parameter in parameters) {
parameter.Value = parameterValues[index];
index++;
}
Essayez autant que je puisse, le paramètre.Valeur est défini sur le tableau d’objets plutôt que sur la valeur de cet objet à la position i.
Qu'est-ce que j'oublie ici? Existe-t-il un moyen différent d’obtenir la valeur d’objet dans un tableau d’objets autrement que par index / position?
Ok, voici ce que je fais.
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;
}
Il semble comme ça devrait travailler, alors je pense que je vais revenir en arrière et enquêter sur ce que je suis en train de passer. Peut-être suis-je en train de passer un tableau de tableaux ou de faire autre chose d’étrange.
Réponses:
0 pour la réponse № 1Je l'ai trouvé Je faisais quelque chose de bizarre.
J'envoyais les parametersValues sous forme de liste de la façon suivante:
CreateStoredProcedureCommand("spName", pContext.SqlParameters.Select(b=>b.Value).ToList())
Changé à ToArray () et cela a fonctionné.