SqlCommand.Parameters.AddWithValue no devolver resultados correctos
-
20-09-2019 - |
Pregunta
Voy a admitir que soy un poco de un novato (aunque el aprendizaje rápido!) Cuando se trata de utilizar consultas parametrizadas en C #, así que estoy probablemente sólo con vistas a algo aquí, pero me parece que no puede cifra encontrar la manera de obtener una consulta parametrizada a trabajar para mí.
Este es un ejemplo muy simplificado. Si se necesita más información, estoy ciertamente dispuestos a suministrarlo.
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();
}
El uso de SQL Server, puedo ver que la siguiente consulta se publica:
exec sp_executesql N'SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE ''@STATE''))',N'@STATE nvarchar(2)',@STATE=N'MA'
Si corro que consulta directamente en SQL Server Management Studio, devuelve 0. Sin embargo, si modifico la consulta como la siguiente:
exec sp_executesql N'SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE ''MA''))',N'@STATE nvarchar(2)',@STATE=N'MA'
Y ejecutarlo, aparece un recuento de los 51 espalda, lo cual es correcto.
¿Qué me estoy perdiendo aquí?
Solución
no necesita comillas alrededor @STATE
Otros consejos
Sólo tiene que Unquote el parámetro de la sentencia SQL (citando el texto de SQL Server hace que lo tratan como un literal). Cambiar esto:
command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE '@STATE'));
a esto:
command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE @STATE));