SqlCommand.Parameters.AddWithValue Non retour résultats corrects
-
20-09-2019 - |
Question
Je dois admettre que je suis un peu d'un débutant (bien que l'apprentissage rapide!) En ce qui concerne l'utilisation des requêtes paramétrées en C #, donc je suis probablement juste donnant quelque chose ici, mais je ne peux pas sembler figurer comment obtenir une requête paramétrées à travailler pour moi.
Voici un exemple beaucoup plus simple. Si plus d'information est nécessaire, je suis certainement prêt à fournir.
using (SqlCommand command = connection.CreateCommand())
{
command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE '@STATE'));
command.Parameters.AddWithValue("@State", "MA");
connection.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
count = Convert.ToInt32(reader[0]);
}
reader.Close();
connection.Close();
}
Utilisation de profils SQL Server, je peux voir que la requête suivante est émise:
exec sp_executesql N'SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE ''@STATE''))',N'@STATE nvarchar(2)',@STATE=N'MA'
Si je lance cette requête directement dans SQL Server Management Studio, il renvoie 0. Si, cependant, je modifie la requête comme ceci:
exec sp_executesql N'SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE ''MA''))',N'@STATE nvarchar(2)',@STATE=N'MA'
Et l'exécuter, je reçois un compte de 51 retour, ce qui est correct.
Qu'est-ce que je suis absent ici?
La solution
vous n'avez pas besoin de guillemets autour @STATE
Autres conseils
Vous avez juste besoin de votre CITATION paramètre dans l'instruction SQL (texte citant fait traiter SQL Server comme un littéral). Changer ceci:
command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE '@STATE'));
à ceci:
command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE @STATE));