我有这个:
If String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
现在,什么时候editTransactionRow.pay_id
是 Null,Visual Basic 会抛出异常。这段代码有问题吗?
null
VB中的等价物是Nothing
你的支票想要:
If editTransactionRow.pay_id IsNot Nothing Then
stTransactionPaymentID = editTransactionRow.pay_id
End If
或者,如果您实际上想要检查 SQL 空值:
If editTransactionRow.pay_id <> DbNull.Value Then
...
End If
editTransactionRow.pay_id 是 Null 所以实际上你正在做: null.ToString() 并且它不能被执行。您需要检查 editTransactionRow.pay_id 而不是 editTransactionRow.pay_id.ToString();
您的代码应该是(如果 pay_id 是一个字符串):
If String.IsNullOrEmpty(editTransactionRow.pay_id) = False Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
如果 pay_id 是一个整数,那么您可以在没有字符串的情况下检查它是否通常为空...编辑以显示它是否不是字符串:
If editTransactionRow.pay_id IsNot Nothing Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
如果它来自数据库,您可以使用 IsDBNull,但如果不是,请不要使用它。
如果您使用的是强类型数据集,那么您应该这样做:
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。
您还可以使用 IsDBNull 函数:
If Not IsDBNull(editTransactionRow.pay_id) Then
...
If Not IsDBNull(dr(0)) Then
use dr(0)
End If
不要使用= Nothing
or Is Nothing
,因为它无法检查数据行值是否为空。我试过了,我确保上面的代码有效。
我发现最安全的方法是
If Not editTransactionRow.pay_id Is Nothing
它可能读起来很糟糕,但 ISIL 实际上与 IsNot Nothing 有很大不同,它不会尝试评估表达式,这可能会给出空引用异常。
您必须检查以确保 editTransactionRow 不为空且 pay_id 不为空。
这是准确的答案。试试这个代码:
If String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
If Not editTransactionRow.pay_id AndAlso String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
If Short.TryParse(editTransactionRow.pay_id, New Short) Then editTransactionRow.pay_id.ToString()