我目前正在使用sql后端的vb.net windows表单应用程序中工作。我有两个数据表绑定到两个独立的sql语句,并返回两个非常简单的数据表。我只需要检查两个表中的任何一个表中是否有空值。第一个查询返回单个值,实际上是单个单元格。我总是在dgv中使用以下代码来检查null
Dim Check As Integer = dt.Rows(1).cells(1).value
然而这在这里不起作用,似乎是因为数据类型是整数。通常使用DGV我正在进行点击事件,并且从最终用户可以看到dgv。
第二个sql查询只是2个单元格。因为它有2行和1列,我需要检查两个单元格,以确保它们都不为空。
我一直在网上寻找,但我找不到任何对我有用的东西。
------------------------更新---------------------- ------
Public Shared Function ToInt32(Value As Object) As Integer
If DBNull.Value.Equals(Value) Then
Return 0
Else
Return Convert.ToInt32(Value)
End If
End Function
Dim ncheck As Integer
ncheck = SafeConvert.ToInt32(dt.Rows(1)(1))
我如何在if语句中使用此ncheck来运行exit子句和消息框?在我看来,如果ncheck不是一个整数,它就会崩溃我。
答案 0 :(得分:4)
以下是一组安全转换方法,您可以将它们用作共享方法,也可以将它们转换为扩展名:
Class SafeConvert
Public Shared Function ToInt32(Value As Object) As Integer
If DBNull.Value.Equals(Value) Then
Return 0
Else
Return Convert.ToInt32(Value)
End If
End Function
Public Shared Function ToInt64(Value As Object) As Int64
If DBNull.Value.Equals(Value) Then
Return 0
Else
Return Convert.ToInt64(Value)
End If
End Function
Public Shared Function ToDecimal(Value As Object) As Decimal
If DBNull.Value.Equals(Value) Then
Return 0
Else
Return Convert.ToDecimal(Value)
End If
End Function
Public Shared Shadows Function ToString(Value As Object) As String
If DBNull.Value.Equals(Value) Then
Return String.Empty
Else
Return Convert.ToString(Value)
End If
End Function
End Class
示例:
Dim nCheck As Integer
nCheck = SafeConvert.ToInt32(dt.Rows(1)(1))
' or
nCheck = SafeConvert.ToInt32(dt.Rows(0).Item(1))
当然,该行必须有效且在该索引处有一个单元格,这只是测试DBNull
,而不是NullReference
。
答案 1 :(得分:2)
使用DbNull.Value
:
If Not DbNull.Value.Equals(dt.Rows(1).Item(1).value) Then
' do something
Else
' do something else
End If
或使用
If dt.Rows(1).Item(1).value=DbNull.Value