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?

È stato utile?

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));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top