2

C# でパラメーター化されたクエリを使用することになると、私は少し初心者であることを認めます (学習は速いですが!)。私のために機能するパラメーター化されたクエリを取得します。

これは非常に単純化された例です。さらに情報が必要な場合は、喜んで提供します。

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

SQL Server Profiler を使用すると、次のクエリが発行されていることがわかります。

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

If I run that query directly in SQL Server Management Studio, it returns 0. ただし、次のようにクエリを変更すると:

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

実行すると、正しい 51 のカウントが返されます。

ここで何が欠けていますか?

4

2 に答える 2

4

SQL ステートメントでパラメーターの引用符を外すだけです (テキストを引用すると、SQL Server はそれをリテラルとして扱います)。これを変える:

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

これに:

command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE @STATE));
于 2010-02-11T21:40:54.390 に答える
1

@STATE を引用符で囲む必要はありません

于 2010-02-11T21:41:08.653 に答える