可以在VB.NET中使用Nullable类型吗?如果是这样,是否可以使用Nullable Integer,我可以使用在SQL Server中接受NULL的字段?例子将不胜感激。
答案 0 :(得分:49)
VB.Net确实具有可空类型,可以通过以下两种不同的方式声明它们。
Dim iNullable As Integer?
或
Dim iNullable As Nullable(Of Integer)
答案 1 :(得分:36)
您无法将Null
,Nothing
或DBNull
分配给VB中的整数。您可以使用Nullable(Of Integer)
来完成该操作,或者在Object
(可以是Nothing
)中填充整数值。
答案 2 :(得分:7)
.NET中的整数(System.Int32
等)不能直接为空;但是,有Nullable-of-T
允许你创建任何值类型为nullable-ish。请注意,您可能需要针对DBNull
而不是null
/ Nothing
检查数据库。
所以是的,你可以做一些非常相似的事情。
答案 3 :(得分:3)
在许多情况下,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))
答案 4 :(得分:1)
不。您必须修改插入或更新查询,以便不添加(或更新)该值以在数据库中获取null。
答案 5 :(得分:1)
我只知道从客户端代码中输入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)