получить доступ к sql-параметру с помощью dbnull - PullRequest
0 голосов
/ 08 октября 2018

Я хочу обновить некоторые строки в моей базе данных доступа.При наборе всего запроса в commandtext-object все работает просто отлично.Но когда я пытаюсь использовать параметры, значение DBNull не распознается:

Вот как я это делаю:

using (var connection = new OleDbConnection(CONNECTION_STRING_ACCESS))
{
    connection.Open();
    using (var command = connection.CreateCommand())
    {
          //this works
          //command.CommandText = "UPDATE MY_TABLE SET COL_1 = '10' WHERE COL_2 = '78' AND COL_3 IS NULL";

          //this doesn't work...
          command.CommandText = "UPDATE MY_TABLE SET COL_1 = @COL_1 WHERE COL_2 = @COL_2 AND COL_3 = @COL_3
          command.Parameters.AddWithValue("@COL_1", 20);
          command.Parameters.AddWithValue("@COL_2", 78);
          command.Parameters.AddWithValue("@COL_3", DBNull.Value);

          var rows_updated = command.ExecuteNonQuery();

          Console.WriteLine(rows_updated);
     }
}

Как мне обращаться с параметром DBNullчтобы обновить строки, которые имеют COL_2 = 78 и COL_3 = [Null]?

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

NULL не определено, поэтому ничто не может быть равным NULL, вы должны использовать синтаксис IS NULL.

Вам необходим блок IF / ELSE для построения SQL на основе наличия значения для COL_3.Создайте SQL с IS NULL, если нет значения, или создайте SQL и свяжите переменную (ваш существующий код), если он присутствует.

См. SQL равен нулю и = нуль

0 голосов
/ 08 октября 2018

Просто установка значения параметра в DBNull не работает.Мне пришлось изменить запрос в моем объекте commandtext, когда я хочу проверить, имеет ли столбец нулевое значение, например @Reniuz, упомянутый в его комментарии:

UPDATE MY_TABLE SET COL_1 = @COL_1 WHERE COL_2 = @COL_2 AND COL_3 IS NULL
...