Передать нулевой параметр в запрос SQL-сервера

Как я могу передать нулевой параметр к запросу сервера SQL. У меня есть простая таблица с обнуляемым int столбцом. Если я передаю нулевое значение.NET, я получаю ошибку 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();
...

3 ответа

Решение

Поскольку NULL ничего не соответствует (даже NULL = NULL - false), у вас нет другого выбора, кроме как использовать оператор IS NULL.

Как уже упоминалось, NULL не равен самому себе. Но у вас есть другой вариант. Если вас беспокоит NULL в этом сценарии, вы можете просто вставить пустую строку в значение вашего параметра и написать сам запрос следующим образом:

select * from myTable where COALESCE(myColumn,'') = ?

В SQL null действует немного иначе, чем другие значения - вы не можете просто оценивать вещи как наличие = null, так как это на самом деле не работает, вам нужно вместо этого использовать "myColumn is null".

В вашем случае, когда вам нужно сопоставить либо значение, либо ноль, вам может понадобиться использовать оператор case в предложении where.

Немного о прочтении: википедия

Другие вопросы по тегам