Ответ 1
вы хотите DBNull. Значение.
В моем общем DAL-коде я использую вспомогательный метод, который просто делает:
foreach (IDataParameter param in cmd.Parameters)
{
if (param.Value == null) param.Value = DBNull.Value;
}
Мне ранее рассказывали, как устанавливать параметры в 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
Есть ли что-то, что мне не хватает? Я делаю это неправильно?
вы хотите DBNull. Значение.
В моем общем DAL-коде я использую вспомогательный метод, который просто делает:
foreach (IDataParameter param in cmd.Parameters)
{
if (param.Value == null) param.Value = DBNull.Value;
}
Я использую метод расширения 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);
Попробуйте установить его на DbNull.Value
.