1

null パラメータを SQL サーバー クエリに渡す方法を教えてください。null 可能な int 列を持つ単純なテーブルがあります。.NET null 値を渡すと、SQL エラーが発生します。DBNull.Value を渡すと、フィルターに一致する行はありません。ISNULL を使用せずにこれを行う簡単な方法はありますか。

    OleDbConnection connection = new OleDbConnection();
    connection.ConnectionString = ...;
    connection.Open();
    OleDbCommand cmd = new OleDbCommand();
    cmd.Connection = connection;
    cmd.CommandText = "select * from myTable where myColumn = ?";
    OleDbParameter parameter = cmd.Parameters.Add(null, OleDbType.Integer);
    parameter.DbType = System.Data.DbType.Int32 ;
    parameter.IsNullable = true;
    parameter.Value = DBNull.Value; // no row returned
    parameter.Value = null; // sql error
    var reader = cmd.ExecuteReader();
...
4

3 に答える 3

4

NULL は何にも一致しないため (NULL = NULL が false であっても)、IS NULL ステートメントを使用する以外に選択肢はありません。

于 2009-07-07T19:15:37.270 に答える
2

ocdecio で言及されているように、NULL はそれ自体と等しくありません。しかし、別のオプションがあります。このシナリオで NULL が心配な場合は、パラメーター値に空の文字列を入れて、次のようにクエリ自体を記述できます。

select * from myTable where COALESCE(myColumn,'') = ?
于 2009-07-07T19:22:57.613 に答える
0

SQLでは、nullの動作は他の値とは少し異なります。これは実際には機能しないため、単にnullであると評価することはできません。代わりに、「myColumnisnull」を使用する必要があります。

あなたの場合、値またはnullのいずれかを照合する必要がある場合は、where句でcaseステートメントを使用する必要があります。

少し読んでください:ウィキペディア

于 2009-07-07T19:16:24.383 に答える