2016-05-13 86 views
-1

我在vb.net中运行查询,我想测试列是否为空。我曾尝试:vb.net检查数据库值是否为空

If reader.GetString(2) IsNot Nothing Then 

If IsDBNull(reader.GetString(2)) Then 

If reader.GetString(2) IsNot NULL Then 

If NOT reader.GetString(2) IS Nothing Then 

If NOT reader.GetString(2) IS NULL Then 

,但他们全部回归:

Data is Null. This method or property cannot be called on Null values. 

当我在MySQL运行我的查询,该列显示NULL

+0

'reader'null? – Cortright

回答

4

的问题是GetString方法内部投你行值赋给一个字符串。如果行值为空,则会得到异常。

的修复程序使用VB.NET三元运算符

Dim result = IF(reader.IsDbNull(2), "", reader.GetString(2)) 

,或者如果你不想指定一个默认值时,第三场为空,你可以简单地写

if Not reader.IsDbNull(2) Then 
    ....... 
End if 
+0

我可以使用IsNotNull吗? – charlie

+0

抱歉,但不是?我对此并不熟悉。你在哪里找到它? – Steve

+0

我没有,这就是为什么我问。或者我应该'如果不reader.IsDBNull(2)那么' – charlie

0

仅供将来参考:

您有几种方法来检查db值是否为空。
这里的例子是完整的命名空间。

Dim reader As System.Data.SqlClient.SqlDataReader 
Dim fieldIndex As Integer = 0 

' reader(fieldIndex) is equivalent to reader.Item(fieldIndex) 
Dim fieldValue As Object = reader.Item(fieldIndex) 

Dim isFieldValueNull As Boolean 

' Namespace: System.Data.SqlClient; Class: SqlDataReader 
isFieldValueNull = reader.IsDBNull(fieldIndex) 

' Namespace: Microsoft.VisualBasic; Module: Information 
isFieldValueNull = Microsoft.VisualBasic.IsDBNull(fieldValue) 

' Namespace: System; Class: Convert 
isFieldValueNull = System.Convert.IsDBNull(fieldValue) 

' Namespace: System; Class: DBNull 
isFieldValueNull = System.DBNull.Value.Equals(fieldValue) 

注:DBNull.Value总有DBNull一个实例,因此这是从来没有Nothing

如果您想检查数据库值是否为空,那么您可以在方法调用之前放置Not关键字。

Dim isFieldValueNotNull As Boolean 

isFieldValueNotNull = Not reader.IsDBNull(fieldIndex) 
isFieldValueNotNull = Not Microsoft.VisualBasic.IsDBNull(fieldValue) 
isFieldValueNotNull = Not System.Convert.IsDBNull(fieldValue) 
isFieldValueNotNull = Not System.DBNull.Value.Equals(fieldValue)