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

Nullable Types в VB.NET?

Можно ли использовать Nullable Types в VB.NET? Если да, возможно ли иметь Nullable Integer, которое я могу использовать с полем, которое принимает NULL в SQL Server? Примеры были бы оценены.

4b9b3361

Ответ 1

Обнуляемые типы могут использоваться в VB.NET так же, как в С#.

Вы не можете назначить Null, Nothing или DBNull пустому Integer в VB, но вместо этого вы можете использовать Nullable(Of Integer) :

Dim x As Integer? = Nothing

В качестве альтернативы иногда (но редко) имеет смысл заключать целочисленное значение в Object (который может быть Nothing).

Ответ 2

У VB.Net есть типы с нулевым значением, они могут быть объявлены двумя различными способами.

Dim iNullable As Integer?

или

Dim iNullable As Nullable(Of Integer)

Ответ 3

Целые числа (System.Int32 и т.д.) в .NET не имеют прямого значения NULL; однако существует Nullable-of-T, что позволяет сделать любой тип значения nullable-ish. Обратите внимание, что вам может потребоваться проверить базу данных на DBNull, а не на null/Nothing.

Итак, да, вы можете сделать что-то очень похожее.

Ответ 4

В ряде случаев Nothing преобразуется в значение по умолчанию. Чтобы использовать Nothing так же, как вы бы использовали null, вам нужно применить его к нулевому типу.

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

Ответ 5

Только так, как я знаю, ввести NULL в db из кода клиента (как задано в вопросе ниже) - использовать значения по умолчанию в SQL равные NULL.

Итак, в Update/Insert хранимой процедуре вы можете использовать что-то вроде:

create proc dbo.UpdateSomeTable
    @Id int, 
    @Status bit = NULL
as
begin
    update dbo.SomeTable
    set Status = @Status
    where Id = @Id
end

и где-то в коде

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)

Ответ 6

Неа. Вам нужно будет изменить запрос на вставку или обновление, чтобы не добавлять (или обновлять) это значение, чтобы получить нуль в базе данных.