Tipos anulables en VB.NET?
(6)
¿Se pueden usar los tipos anulables en VB.NET? Si es así, ¿es posible tener un entero anulable que pueda usar con un campo que acepte NULL en SQL Server? Se apreciarían ejemplos.
En algunos casos, Nothing
se convertirá al valor predeterminado. Para utilizar Nothing
la misma forma en que usaría null
, debe convertirlo en el tipo de nullable correcto.
Dim str As String
Dim int As Nullable(Of Integer) '' or use As Integer?
Dim reader As SqlDataReader
Dim colA As Integer = reader.GetOrdinal("colA")
Dim colB As Integer = reader.GetOrdinal("colB")
str = If(reader.IsDBNull(colA), DirectCast(Nothing, String), reader.GetString(colA))
int = If(reader.IsDBNull(colB), DirectCast(Nothing, Nullable(Of Integer)), reader.GetInt32(colB))
La única forma que conozco de ingresar NULL en db desde el código del cliente (como se pregunta en los comentarios a continuación de la pregunta) es usar valores predeterminados en SQL igual a NULL.
Así que en el procedimiento almacenado Actualizar / Insertar puede usar algo como:
create proc dbo.UpdateSomeTable
@Id int,
@Status bit = NULL
as
begin
update dbo.SomeTable
set Status = @Status
where Id = @Id
end
y en algún lugar en el código
Dim pars As List(Of SqlParameter) = New List(Of SqlParameter)
With pars
.Add(New SqlParameter("@Id", LogbookNoteId))
If Flag Then
.Add(New SqlParameter("@Status", Flag))
End If
End With
ExecuteNonQuery("dbo.UpdateSomeTable", pars, CommandType.StoredProcedure)
Los enteros ( System.Int32
etc.) en .NET no son directamente anulables; sin embargo, existe Nullable-of-T
que le permite hacer cualquier tipo de valor nullable-ish. Tenga en cuenta que es posible que deba verificar la base de datos contra DBNull
lugar de null
/ Nothing
.
Así que sí, puedes hacer algo muy similar.
No Tendrá que modificar la consulta de inserción o actualización para no agregar (o actualizar) ese valor para obtener un valor nulo en la base de datos.
VB.Net tiene tipos anulables, se pueden declarar de las siguientes dos formas diferentes.
Dim iNullable As Integer?
o
Dim iNullable As Nullable(Of Integer)
No puede asignar Null
, Nothing
o DBNull
a un entero en VB. Puede usar un Nullable(Of Integer)
lugar para lograr eso, o Nullable(Of Integer)
el valor entero en un Object
(que puede ser Nothing
).