我有这个:
If String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
现在,当editTransactionRow.pay_id
为空时,Visual Basic会抛出异常。这段代码有问题吗?
答案 0 :(得分:33)
VB中null
的等效值为Nothing
,因此您的支票需要为:
If editTransactionRow.pay_id IsNot Nothing Then
stTransactionPaymentID = editTransactionRow.pay_id
End If
或者,如果您确实想要检查SQL null值,那么可能
If editTransactionRow.pay_id <> DbNull.Value Then
...
End If
答案 1 :(得分:11)
editTransactionRow.pay_id是Null所以实际上你正在做:null.ToString()并且它无法执行。您需要检查editTransactionRow.pay_id而不是editTransactionRow.pay_id.ToString();
你的代码应该是(IF pay_id是一个字符串):
If String.IsNullOrEmpty(editTransactionRow.pay_id) = False Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
如果pay_id是一个Integer,你可以检查它是否正常,如果没有String ... 编辑以显示它是否不是字符串:
If editTransactionRow.pay_id IsNot Nothing Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
如果它来自数据库,您可以使用IsDBNull,但如果没有,请不要使用它。
答案 2 :(得分:8)
如果您使用的是强类型数据集,那么您应该这样做:
If Not ediTransactionRow.Ispay_id1Null Then
'Do processing here
End If
您收到错误,因为强类型数据集会检索基础值并通过属性公开转换。例如,这里基本上是发生了什么:
Public Property pay_Id1 Then
Get
return DirectCast(me.GetValue("pay_Id1", short)
End Get
'Abbreviated for clarity
End Property
GetValue方法返回DBNull,无法将其转换为short。
答案 3 :(得分:8)
您也可以使用IsDBNull函数:
If Not IsDBNull(editTransactionRow.pay_id) Then
...
答案 4 :(得分:6)
If Not IsDBNull(dr(0)) Then
use dr(0)
End If
不要使用= Nothing
或Is Nothing
,因为它无法检查数据行值是否为空。我试过了,我确保上面的代码有效。
答案 5 :(得分:4)
我发现最安全的方法是
If Not editTransactionRow.pay_id Is Nothing
它可能读得非常糟糕,但ISIL实际上与IsNot Nothing非常不同,并且它不会尝试评估表达式,这可能会产生空引用异常。
答案 6 :(得分:1)
您必须检查以确保editTransactionRow不为null且pay_id不为null。
答案 7 :(得分:1)
这是确切的答案。试试这段代码:
If String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
答案 8 :(得分:0)
If Not editTransactionRow.pay_id AndAlso String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
答案 9 :(得分:0)
If Short.TryParse(editTransactionRow.pay_id, New Short) Then editTransactionRow.pay_id.ToString()