C# Préparé États - signe @ (at / strudel signe) requêtes
J'Ai un problème avec une requête préparée en C#:
OdbcCommand cmd = sql.CreateCommand();
cmd.CommandText = "SELECT UNIQUE_ID FROM userdetails WHERE USER_ID = ?";
cmd.Parameters.Add("@USER_ID", OdbcType.VarChar, 250).Value = email;
(bien sûr e-mail contient une adresse de courriel valide, avec le signe@).
Ce code renvoie une erreur aléatoire -
"La connexion a été désactivé"
{"ERREUR [01000] [Microsoft][ODBC SQL
Server Driver][TCP/IP
Sockets]ConnectionWrite (send()).
ERREUR [08S01] [Microsoft][ODBC SQL
Server Driver][Sockets TCP/IP]Général
erreur de réseau. Vérifiez votre réseau
de la documentation".}
Cependant, si je lance mon code sans une déclaration préparée, sens:
cmd.CommandText = "SELECT UNIQUE_ID FROM userdetails WHERE USER_ID = '"+email+"'";
Tout fonctionne parfaitement.
C'est peut-être lié au fait que j'ai un signe @ dans les paramétrés de la valeur? J'ai tendance à penser que je ne suis pas le premier à essayer de créer une déclaration préparée avec une adresse e-mail...
Je n'ai aucune idée de ce qui est mal! D'autres déclarations préparées à l'avance de travailler normalement...
Pouvez-vous s'il vous plaît aider? 🙂
Merci,
Nili
SELECT * FROM table WHERE id = @id
et ensuite appeler .Parameters.Add("@id", email);
-- Essayer, voir si ça fonctionneOriginalL'auteur Nili | 2011-02-10
Vous devez vous connecter pour publier un commentaire.
En effet, ODBC a sa part de problèmes avec l'appui des paramètres nommés.
Cependant, l'utilisation de paramètres nommés est possible.
Par exemple, dans votre cas, la syntaxe suivante fonctionne:
Plus délicate situation est lorsque vous ne disposez pas d'un match unique pour le paramètre comme USER_ID = ?; par exemple, lorsque vous souhaitez utiliser la DANS opérateur dans le OÙ clause.
Alors la syntaxe suivante pour faire le travail:
Veuillez noter que l'utilisation de ? (point d'interrogation) au lieu de @ (arobase) dans le nom du paramètre. À noter toutefois que la substitution des valeurs des paramètres dans cette affaire n'a rien à voir avec leurs noms, mais seulement avec leur commande avec les paramètres de la collection.
J'espère que cela aide 🙂
Après l'exécution de la ligne exactement vous obtenez une erreur d'allocation de mémoire? Ce type d'erreur est-il une exception?
Je vous remercie. Venant de Java, en C# et en essayant de comprendre les instructions préparées a été étonnamment difficile. Cela explique parfaitement une approche similaire à Java, dans le fond, par exemple. Ouf...
OriginalL'auteur Lev
Est-il une raison spécifique que vous utilisez
OdbcCommand
plutôt que d'utiliser leSqlClient
fournisseur?Avec le
SqlClient
fournisseur, vous devriez être en utilisant des paramètres nommés comme d'autres l'ont suggéré.Mais selon MSDN:
Donc je ne suis pas sûr que les paramètres nommés travailleront dans ce cas.
OriginalL'auteur Joe
Utiliser '@USER_ID' au lieu de '?' et tout devrait fonctionner:
OriginalL'auteur Andrew Orsich