将 dbNull 转换为 VB.NET 中的字符串的简单方法
Simple way to convert dbNull to a string in VB.NET
我正在寻找一种更简单的方法来检查值是否为 dbNull,如果是,则将其转换为空字符串。
我需要这个的情况的一个例子是:
Dim dt As New DataTable
Dim conn As New OleDbConnection(someConnStr)
Dim adap As New OleDbDataAdapter(qryCSSInfo, cssConn)
adap.Fill(dt)
Dim someStr As String = "The first column of the first row returned: " & dt.rows(0).item(0)
Msgbox(someStr)
问题是,如果 dt.rows(0).item(0) 在数据库中为空,它将作为 dbNull 值返回,显然不能附加到字符串。
我对这个问题的解决方案是使用 if 语句将值替换为空字符串:
Dim dt As New DataTable
Dim conn As New OleDbConnection(someConnStr)
Dim adap As New OleDbDataAdapter(qryCSSInfo, cssConn)
adap.Fill(dt)
If Not isDBNull(dt.rows(0).item(0)) then
Dim someStr As String = "The first column of the first row returned: " & dt.rows(0).item(0)
Else
Dim someStr As String = "The first column of the first row returned: " & ""
End If
Msgbox(someStr)
这对我来说工作得很好,但如果我必须对我需要在 table 中使用的每一列进行检查,它就会变得难以承受。假设我有 table 中的 10 列,我想用这个字符串显示。我必须对每一个进行检查以确保它们不为空。有没有更简单或更简单的方法?
您可以利用 If Operator 来减少几行代码:
Dim someStr As String = "The first column of the first row returned: " & _
If(dt.rows(0).item(0) Is DbNull.Value, String.Empty, dt.rows(0).item(0))
对于字符串类型可以直接这样使用dt.rows(0).item(0).ToString()
,不需要If
条件
adap.Fill(dt)
Dim someStr As String = "The first column of the first row returned: " & dt.rows(0).item(0).ToString()
MsgBox(somestr)
即您可以完全省略 if 语句。根据 MSDN 任何 DBNull 值将被转换为 EmptyString .ToString()
同时检查这个 SO post Conversion from type 'DBNull' to type 'String'
但是,对于整数、双精度等非字符串数据库列类型,您必须使用 IsDBNull
应用检查以避免任何异常。
您应该能够将空字段与字符串连接起来 - 它应该会转换为空字符串。也就是说 row.IsNull(index) 是一个很好的测试。
SQL = "Select top 10 Region, CompanyName FROM Suppliers"
Dim dt As DataTable = Gen.GetDataTable(SQL, scon)
For Each row As DataRow In dt.Rows
MsgBox(row("companyName") & " region: " & row("Region")) ' null allowed
If row.IsNull("region") Then ' .Net test for Null
MsgBox(row("companyName") & " region is null")
Else
'continue
End If
Next
您也可以在查询中解决此问题 - 将空值隐藏为有用的(或空的)字符串。示例查询来自SQL服务器,不知道你的DB是否支持COALESCE。
MsgBox("COALESCE") ' SQL Server - may not be the same in ODBC databases
SQL = "Select top 10 COALESCE(Region,'na') Region, CompanyName FROM Suppliers"
dt = Gen.GetDataTable(SQL, scon)
For Each row As DataRow In dt.Rows
MsgBox(row("companyName") & " region: " & row("Region"))
Next
一些编码笔记:
Dim dt As New DataTable
Dim conn As New OleDbConnection(someConnStr)
Dim adap As New OleDbDataAdapter(qryCSSInfo, cssConn)
adap.Fill(dt)
If Not IsDBNull(dt.Rows(0).Item(0)) Then ' in OP
'...
End If
' save some typing if you know there will be only one record
' will throw exception is no rows are returned, check for expected count
Dim row As DataRow = dt.Rows(0)
If Not IsDBNull(row(0)) Then
'...
End If
' or
If Not row.IsNull(0) Then
'...
End If
' note the fields can be accessed by name so you can avoid hard coding field position
If Not row.IsNull("FieldName") Then
'...
End If
最简单的方法就是在字段或字符串后添加一个“”。
例如:
dim EmptyString as string = Nullfield() & ""
if EmptyString = ""
' in the sample, it should.
end if
因此,在您的代码中您可以使用:
If dt.rows(0).item(0) & "" = "" then
' it should be...
end if
我将一些空数据放入数据网格的单元格中;正确检索该数据
我将“”字符串连接到单元格值:
Dim readVal As String = "" & row.Cells(2).Value
我正在寻找一种更简单的方法来检查值是否为 dbNull,如果是,则将其转换为空字符串。
我需要这个的情况的一个例子是:
Dim dt As New DataTable
Dim conn As New OleDbConnection(someConnStr)
Dim adap As New OleDbDataAdapter(qryCSSInfo, cssConn)
adap.Fill(dt)
Dim someStr As String = "The first column of the first row returned: " & dt.rows(0).item(0)
Msgbox(someStr)
问题是,如果 dt.rows(0).item(0) 在数据库中为空,它将作为 dbNull 值返回,显然不能附加到字符串。
我对这个问题的解决方案是使用 if 语句将值替换为空字符串:
Dim dt As New DataTable
Dim conn As New OleDbConnection(someConnStr)
Dim adap As New OleDbDataAdapter(qryCSSInfo, cssConn)
adap.Fill(dt)
If Not isDBNull(dt.rows(0).item(0)) then
Dim someStr As String = "The first column of the first row returned: " & dt.rows(0).item(0)
Else
Dim someStr As String = "The first column of the first row returned: " & ""
End If
Msgbox(someStr)
这对我来说工作得很好,但如果我必须对我需要在 table 中使用的每一列进行检查,它就会变得难以承受。假设我有 table 中的 10 列,我想用这个字符串显示。我必须对每一个进行检查以确保它们不为空。有没有更简单或更简单的方法?
您可以利用 If Operator 来减少几行代码:
Dim someStr As String = "The first column of the first row returned: " & _
If(dt.rows(0).item(0) Is DbNull.Value, String.Empty, dt.rows(0).item(0))
对于字符串类型可以直接这样使用dt.rows(0).item(0).ToString()
,不需要If
条件
adap.Fill(dt)
Dim someStr As String = "The first column of the first row returned: " & dt.rows(0).item(0).ToString()
MsgBox(somestr)
即您可以完全省略 if 语句。根据 MSDN 任何 DBNull 值将被转换为 EmptyString .ToString()
同时检查这个 SO post Conversion from type 'DBNull' to type 'String'
但是,对于整数、双精度等非字符串数据库列类型,您必须使用 IsDBNull
应用检查以避免任何异常。
您应该能够将空字段与字符串连接起来 - 它应该会转换为空字符串。也就是说 row.IsNull(index) 是一个很好的测试。
SQL = "Select top 10 Region, CompanyName FROM Suppliers"
Dim dt As DataTable = Gen.GetDataTable(SQL, scon)
For Each row As DataRow In dt.Rows
MsgBox(row("companyName") & " region: " & row("Region")) ' null allowed
If row.IsNull("region") Then ' .Net test for Null
MsgBox(row("companyName") & " region is null")
Else
'continue
End If
Next
您也可以在查询中解决此问题 - 将空值隐藏为有用的(或空的)字符串。示例查询来自SQL服务器,不知道你的DB是否支持COALESCE。
MsgBox("COALESCE") ' SQL Server - may not be the same in ODBC databases
SQL = "Select top 10 COALESCE(Region,'na') Region, CompanyName FROM Suppliers"
dt = Gen.GetDataTable(SQL, scon)
For Each row As DataRow In dt.Rows
MsgBox(row("companyName") & " region: " & row("Region"))
Next
一些编码笔记:
Dim dt As New DataTable
Dim conn As New OleDbConnection(someConnStr)
Dim adap As New OleDbDataAdapter(qryCSSInfo, cssConn)
adap.Fill(dt)
If Not IsDBNull(dt.Rows(0).Item(0)) Then ' in OP
'...
End If
' save some typing if you know there will be only one record
' will throw exception is no rows are returned, check for expected count
Dim row As DataRow = dt.Rows(0)
If Not IsDBNull(row(0)) Then
'...
End If
' or
If Not row.IsNull(0) Then
'...
End If
' note the fields can be accessed by name so you can avoid hard coding field position
If Not row.IsNull("FieldName") Then
'...
End If
最简单的方法就是在字段或字符串后添加一个“”。 例如:
dim EmptyString as string = Nullfield() & ""
if EmptyString = ""
' in the sample, it should.
end if
因此,在您的代码中您可以使用:
If dt.rows(0).item(0) & "" = "" then
' it should be...
end if
我将一些空数据放入数据网格的单元格中;正确检索该数据 我将“”字符串连接到单元格值:
Dim readVal As String = "" & row.Cells(2).Value