VB.NET中的可空类型?

时间:2009-07-14 06:56:12

标签: vb.net

可以在VB.NET中使用Nullable类型吗?如果是这样,是否可以使用Nullable Integer,我可以使用在SQL Server中接受NULL的字段?例子将不胜感激。

6 个答案:

答案 0 :(得分:49)

VB.Net确实具有可空类型,可以通过以下两种不同的方式声明它们。

Dim iNullable As Integer?

Dim iNullable As Nullable(Of Integer)

答案 1 :(得分:36)

您无法将NullNothingDBNull分配给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)