vb.net

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 ).