Frage

Ich gebe zu, dass ich ein bisschen ein Neuling bin (obwohl schnell lernen!), Wenn es um die Verwendung parametrisierte Abfragen in C # kommt, so bin ich wahrscheinlich nur etwas hier mit Blick auf, aber ich kann scheinen nicht zu Figur wie Sie eine parametrisierte Abfrage an die Arbeit für mich bekommen.

Hier ist ein sehr vereinfachtes Beispiel. Wenn mehr Informationen benötigt wird, bin ich sicher bereit, es zu liefern.

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

Verwenden von SQL Server Profiler, kann ich sehen, dass die folgende Abfrage ausgegeben wird:

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

Wenn ich diese Abfrage direkt in SQL Server Management Studio ausführen, ist das Ergebnis 0. Wenn jedoch ändern ich die Abfrage wie folgt aus:

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

Und führen Sie es, ich eine Anzahl von 51 zurück, was richtig ist.

Was ich hier fehlt?

War es hilfreich?

Lösung

Sie brauchen keine Anführungszeichen um @STATE

Andere Tipps

Sie müssen nur Ihre Parameter in der SQL-Anweisung unquote (unter Angabe Text macht SQL Server als eine wörtliche behandeln). Ändern Sie dies:

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

folgt aus:

command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE @STATE));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top