Question

Je dois admettre que je suis un peu d'un débutant (bien que l'apprentissage rapide!) En ce qui concerne l'utilisation des requêtes paramétrées en C #, donc je suis probablement juste donnant quelque chose ici, mais je ne peux pas sembler figurer comment obtenir une requête paramétrées à travailler pour moi.

Voici un exemple beaucoup plus simple. Si plus d'information est nécessaire, je suis certainement prêt à fournir.

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

Utilisation de profils SQL Server, je peux voir que la requête suivante est émise:

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

Si je lance cette requête directement dans SQL Server Management Studio, il renvoie 0. Si, cependant, je modifie la requête comme ceci:

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

Et l'exécuter, je reçois un compte de 51 retour, ce qui est correct.

Qu'est-ce que je suis absent ici?

Était-ce utile?

La solution

vous n'avez pas besoin de guillemets autour @STATE

Autres conseils

Vous avez juste besoin de votre CITATION paramètre dans l'instruction SQL (texte citant fait traiter SQL Server comme un littéral). Changer ceci:

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

à ceci:

command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE @STATE));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top