Pergunta

Admito que sou um novato (embora aprendendo rápido!) Quando se trata de usar consultas parametrizadas em C#, então provavelmente estou apenas negligenciando algo aqui, mas não consigo descobrir como Obtenha uma consulta parametrizada para funcionar para mim.

Aqui está um exemplo muito simplificado. Se for necessária mais informações, certamente estou disposto a fornecê -las.

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();
}

Usando o SQL Server Profiler, posso ver que a seguinte consulta está sendo emitida:

exec sp_executesql N'SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE ''@STATE''))',N'@STATE nvarchar(2)',@STATE=N'MA'

Se eu executar essa consulta diretamente no SQL Server Management Studio, ele retornará 0. Se, no entanto, modifico a consulta como esta:

exec sp_executesql N'SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE ''MA''))',N'@STATE nvarchar(2)',@STATE=N'MA'

E execute -o, tenho uma contagem de 51 de volta, o que está correto.

O que estou perdendo aqui?

Foi útil?

Solução

você não precisa de citações em torno do @state

Outras dicas

Você só precisa desligar seu parâmetro na instrução SQL (a citar o texto faz com que o SQL Server o trate como literal). Mude isso:

command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE '@STATE'));

para isso:

command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE @STATE));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top