代码之家  ›  专栏  ›  技术社区  ›  Azim J

vb.net中dbnull数据的处理

  •  68
  • Azim J  · 技术社区  · 16 年前

    数据表 对象/变量,myDataTable。但是,myDataTable cotain中的一些字段 数据因此,如果任何字段的值 姓氏 , 希德 dbNull .

       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 this question ?

    12 回复  |  直到 8 年前
        1
  •  139
  •   Mitchel Sellers    16 年前

    据我所知,唯一的方法就是测试它,你可以做一个组合的if,尽管这样做很容易。

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

    我是用VB写的,因为这是您所需要的,即使您使用的是混合语言。

    编辑

        2
  •  35
  •   Steve Wortham    15 年前

    我厌倦了处理这个问题,所以我写了一个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()函数经历了几次大修。在泛型之前,我只是将所有内容都指定为对象。但我更喜欢通用版本。

        3
  •  11
  •   Mitchel Sellers    16 年前

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

        4
  •  6
  •   Jimi    6 年前

    Steve Wortham's code ,名义上与 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 )

        5
  •  3
  •   Christian Hayter    15 年前

    Microsoft在.NET1.0中提出了DBNull来表示数据库NULL。然而,使用它是一件很麻烦的事情,因为您不能创建一个强类型变量来存储真正的值或null。微软在.NET2.0中用可空类型解决了这个问题。但是,您仍然需要使用大量使用DBNull的API,并且这些API无法更改。

    1. 所有包含从数据库读取或写入的数据的变量都应该能够处理空值。对于值类型,这意味着使它们可以为null(对于T)。对于引用类型(String和Byte()),这意味着允许值为零。
    2. 编写一组函数,在“可能包含DBNull的对象”和“可为Null的.NET变量”之间来回转换。在这些函数中包装对DBNull样式API的所有调用,然后假装DBNull不存在。
        6
  •  2
  •   brendan    16 年前

      If  IsDbNull(myItem("sID")) = False AndAlso myItem("sID")==sID Then
        // Do something
    End If
    
        7
  •  2
  •   John B    12 年前

    While reader.Read()
     colDropdownListNames.Add(New DDLItem( _
     CType(reader("rid"), Integer), _
     CType(reader("Item_Status"), String), _
     CType(reader("Text_Show"), String), _
     CType( IIf(IsDBNull(reader("Text_Use")), "", reader("Text_Use")) , String), _
     CType(reader("Text_SystemOnly"), String), _
     CType(reader("Parent_rid"), Integer)))
    End While
    
        8
  •  1
  •   Azim J    16 年前

    对于包含字符串的行,我可以将它们转换为字符串,如更改

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

    tmpStr = myItem("lastname").toString + " " + myItem("intials").toString
    

    以供在 如果 陈述 myItem(“sID”)=sID ,需要更改为

    myItem("sID").Equals(sID)
    

    然后代码将在没有任何运行时错误的情况下运行,因为 vbNull 数据

        9
  •  1
  •   BINU NARAYANAN NELLIYAMPATHI    11 年前
       VB.Net
       ========
        Dim da As New SqlDataAdapter
        Dim dt As New DataTable
        Call conecDB()        'Connection to Database
        da.SelectCommand = New SqlCommand("select max(RefNo) from BaseData", connDB)
    
        da.Fill(dt)
    
        If dt.Rows.Count > 0 And Convert.ToString(dt.Rows(0).Item(0)) = "" Then
            MsgBox("datbase is null")
    
        ElseIf dt.Rows.Count > 0 And Convert.ToString(dt.Rows(0).Item(0)) <> "" Then
            MsgBox("datbase have value")
    
        End If
    
        10
  •  0
  •   JAY SINGH    11 年前

    朋友们好

    这是在DataGrid中检查db Null并转换为字符串的最短方法

    1. 创建单元验证事件并编写此代码
    2. 如果Convert.ToString(dgv.CurrentCell.Value)=“”,则
    3. CurrentCell.Value=“”
    4. 如果结束
        11
  •  0
  •   Rajan Goswami    9 年前

    到目前为止 DBNull 一串。 诀窍是你 不能 TRIM

    之前 (产生错误消息):

    Me.txtProvNum.Text = IIf(Convert.IsDBNull(TRIM(myReader("Prov_Num"))), "", TRIM(myReader("Prov_Num")))
    

    (没有更多错误消息:-):

    Me.txtProvNum.Text = IIf(Convert.IsDBNull(myReader("Prov_Num")), "", myReader("Prov_Num"))
    
        12
  •  0
  •   Sabbir Hassan    8 年前
        13
  •  0
  •   B H    3 年前

    简单,但不明显。

    DbNull.Value.Equals(myValue)
    

    我讨厌VB.NET