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í?

¿Fue útil?

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));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top