.net - validar - los datos tienen valor null no se puede llamar a este método o propiedad con valores null
Establezca un valor de base de datos en nulo con un parámetro SqlCommand+ (3)
Anteriormente, me enseñaron cómo configurar parámetros en una consulta SQL en .NET en esta respuesta ( clic ).
El uso de parámetros con valores está bien, pero cuando intento establecer un campo en la base de datos para anular, no tengo éxito. O el método piensa que no estoy estableciendo un parámetro válido o que no especifica un parámetro.
p.ej
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
¿Se me escapa algo? ¿Lo estoy haciendo mal?
Intente configurarlo en DbNull.Value
.
quieres DBNull .Value.
En mi código DAL compartido, uso un método auxiliar que simplemente funciona:
foreach (IDataParameter param in cmd.Parameters)
{
if (param.Value == null) param.Value = DBNull.Value;
}
Utilizo un método de extensión SqlParameterCollection
que me permite agregar un parámetro con un valor que admite valores NULL. Se encarga de convertir null
en DBNull
. (Lo siento, no soy fluido en 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);
}
}
Uso:
string? optionalName = "Bozo";
cmd.Parameters.AddWithNullable("@Name", optionalName);