Подтвердить что ты не робот

Задайте для базы данных значение null с параметрами SqlCommand +

Мне ранее рассказывали, как устанавливать параметры в SQL-запросе в .NET в этом ответе (click).

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

например.

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

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

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

4b9b3361

Ответ 1

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

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

    foreach (IDataParameter param in cmd.Parameters)
    {
        if (param.Value == null) param.Value = DBNull.Value;
    }

Ответ 2

Я использую метод расширения SqlParameterCollection, который позволяет мне добавить параметр с нулевым значением. Он выполняет преобразование 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

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