Передать нулевой параметр в запрос 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.
Немного о прочтении: википедия