19

我有这个:

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 会抛出异常。这段代码有问题吗?

4

10 回答 10

37

nullVB中的等价物是Nothing你的支票想要:

If editTransactionRow.pay_id IsNot Nothing Then
    stTransactionPaymentID = editTransactionRow.pay_id
End If

或者,如果您实际上想要检查 SQL 空值:

If editTransactionRow.pay_id <> DbNull.Value Then
    ...
End If
于 2008-12-18T15:51:11.687 回答
11

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,但如果不是,请不要使用它。

于 2008-12-18T15:44:22.463 回答
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。

于 2008-12-18T15:55:03.660 回答
8

您还可以使用 IsDBNull 函数:

If Not IsDBNull(editTransactionRow.pay_id) Then
...
于 2011-09-01T20:33:28.400 回答
6
If Not IsDBNull(dr(0)) Then
    use dr(0)
End If

不要使用= Nothingor Is Nothing,因为它无法检查数据行值是否为空。我试过了,我确保上面的代码有效。

于 2012-02-29T11:09:31.813 回答
4

我发现最安全的方法是

If Not editTransactionRow.pay_id Is Nothing

它可能读起来很糟糕,但 ISIL 实际上与 IsNot Nothing 有很大不同,它不会尝试评估表达式,这可能会给出空引用异常。

于 2013-06-07T00:09:40.853 回答
1

您必须检查以确保 editTransactionRow 不为空且 pay_id 不为空。

于 2008-12-18T15:45:09.780 回答
1

这是准确的答案。试试这个代码:

If String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then
    stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
于 2010-11-21T14:04:10.247 回答
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
于 2008-12-18T15:46:34.970 回答
0
 If Short.TryParse(editTransactionRow.pay_id, New Short) Then editTransactionRow.pay_id.ToString()
于 2008-12-18T15:59:23.277 回答