SqlCommand.Parameters.AddWithValue non tornare risultati corretti
-
20-09-2019 - |
Domanda
Devo ammettere che sono un po 'di un novizio (anche se apprendimento veloce!) Quando si tratta di utilizzare query con parametri in C #, quindi sono probabilmente appena si affaccia qualcosa qui, ma io non riesco a capire come ottenere una query con parametri a lavorare per me.
Ecco un esempio molto semplificato. Se sono necessarie ulteriori informazioni, io sono certamente disposto a fornirle.
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();
}
Utilizzo di SQL Server Profiler, posso vedere che la seguente query viene emesso:
exec sp_executesql N'SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE ''@STATE''))',N'@STATE nvarchar(2)',@STATE=N'MA'
Se corro che query direttamente in SQL Server Management Studio, restituisce 0. Se, però, ho modificare la query in questo modo:
exec sp_executesql N'SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE ''MA''))',N'@STATE nvarchar(2)',@STATE=N'MA'
E eseguirlo, ho un conteggio di 51 schiena, che è corretto.
Che cosa mi manca qui?
Soluzione
non è necessario virgolette @STATE
Altri suggerimenti
Hai solo bisogno di unquote vostro parametro nell'istruzione SQL (citando il testo rende SQL Server trattarlo come un letterale). Modificare questa:
command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE '@STATE'));
a questo:
command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE @STATE));