Установите значение базы данных в null с параметрами SqlCommand + - PullRequest
28 голосов
/ 04 октября 2008

Сегодня меня уже учили, как задавать параметры в запросе SQL в .NET в этом ответе ( click ).

Использование параметров со значениями - это нормально, но когда я пытаюсь установить поле в базе данных на ноль, у меня ничего не получается. Либо метод считает, что я не устанавливаю допустимый параметр, либо не задаю параметр.

, например

Dim dc As New SqlCommand("UPDATE Activities SET [Limit] = @Limit WHERE [Activity] = @Activity", cn)

If actLimit.ToLower() = "unlimited" Then
    ' It's not nulling :(
    dc.Parameters.Add(New SqlParameter("Limit", Nothing))
Else
    dc.Parameters.Add(New SqlParameter("Limit", ProtectAgainstXSS(actLimit)))
End If

Есть что-то, что я пропускаю? Я делаю это неправильно?

Ответы [ 3 ]

73 голосов
/ 04 октября 2008

Вы хотите DBNull . Значение.

В моем общем коде DAL я использую вспомогательный метод, который просто делает:

    foreach (IDataParameter param in cmd.Parameters)
    {
        if (param.Value == null) param.Value = DBNull.Value;
    }
7 голосов
/ 03 апреля 2013

Я использую метод расширения SqlParameterCollection, который позволяет мне добавить параметр со значением NULL. Он заботится о преобразовании null в DBNull. (Извините, я не свободно говорю на VB.)

public static class ExtensionMethods
{
    public static SqlParameter AddWithNullable<T>(this SqlParameterCollection parms,
            string parameterName, T? nullable) where T : struct
    {
        if (nullable.HasValue)
            return parms.AddWithValue(parameterName, nullable.Value);
        else
            return parms.AddWithValue(parameterName, DBNull.Value);
    }
}

Использование:

string? optionalName = "Bozo";
cmd.Parameters.AddWithNullable("@Name", optionalName);
3 голосов
/ 04 октября 2008

Попробуйте установить значение DbNull.Value.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...