Можно ли использовать Nullable Types в VB.NET? Если да, возможно ли иметь Nullable Integer, которое я могу использовать с полем, которое принимает NULL в SQL Server? Примеры были бы оценены.
Nullable Types в VB.NET?
Ответ 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
Неа. Вам нужно будет изменить запрос на вставку или обновление, чтобы не добавлять (или обновлять) это значение, чтобы получить нуль в базе данных.