当前位置:  开发笔记 > 后端 > 正文

在vb.net中处理dbnull数据

如何解决《在vb.net中处理dbnull数据》经验,为你挑选了4个好方法。

我想生成从MS-Access数据库检索并存储在DataTable对象/变量myDataTable中的一些格式化数据输出.但是,myDataTable中的一些字段包含dbNull数据.因此,如果任何字段lastname,intialssID的值为dbNull,则以下VB.net代码段将给出错误.

   dim myDataTable as DataTable
   dim tmpStr as String
   dim sID as Integer = 1

   ...
   myDataTable = myTableAdapter.GetData() ' Reads the data from MS-Access table
   ...

   For Each myItem As DataRow In myDataTable.Rows

    tmpStr = nameItem("lastname") + " " + nameItem("initials")

    If myItem("sID")=sID Then
        ' Do something
    End If

    ' print tmpStr

   Next

所以,我如何得到上面的代码工作时字段可能包含的DBNull,而不必每次数据是否为DBNull在时间来检查这个问题?



1> Mitchel Sell..:

我知道的唯一方法是测试它,你可以做一个组合,如果让它变得容易.

If NOT IsDbNull(myItem("sID")) AndAlso myItem("sID") = sId Then
   'Do success
ELSE
   'Failure
End If

我在VB中写道,即使你混合语言,它也是你需要的东西.

编辑

清理使用IsDbNull使其更具可读性



2> Steve Wortha..:

我厌倦了处理这个问题所以我写了一个NotNull()函数来帮助我.

Public Shared Function NotNull(Of T)(ByVal Value As T, ByVal DefaultValue As T) As T
        If Value Is Nothing OrElse IsDBNull(Value) Then
                Return DefaultValue
        Else
                Return Value
        End If
End Function

用法:

If NotNull(myItem("sID"), "") = sID Then
  ' Do something
End If

多年来,我的NotNull()函数经历了几次大修.在Generics之前,我只是将所有内容都指定为Object.但我更喜欢通用版本.


我更喜欢使第二个变量是可选的,因此签名是这样的:`公共共享函数NotNull(Of T)(ByVal值为T,可选ByVal DefaultValue为T = Nothing)作为T`并且它可以被称为`If NotNull (myItem("sID"))= sID然后`或如上所列.
+1工作得非常好,我已根据SQL Server将其命名为IsNull().

3> Mitchel Sell..:

您还可以使用Convert.ToString()和Convert.ToInteger()方法有效地转换DB null.



4> 小智..:

Steve Wortham代码的变体,名义上与nullable类型一起使用:

Private Shared Function GetNullable(Of T)(dataobj As Object) As T
    If Convert.IsDBNull(dataobj) Then
        Return Nothing
    Else
        Return CType(dataobj, T)
    End If
End Function

例如

mynullable = GetNullable(Of Integer?)(myobj)

然后你可以查询mynullable(例如mynullable.HasValue)

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有