【问题标题】:How to check for a Null value in VB.NET如何在 VB.NET 中检查 Null 值
【发布时间】:2010-09-27 13:15:55
【问题描述】:

我有这个:

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

【问题讨论】:

  • editTransactionRow 的类型是什么?
  • 如果您需要帮助,您需要发布您收到的确切错误消息。
  • 这个“空”值是什么? Nothing? DbNull.Value?

标签: vb.net dataset


【解决方案1】:

VB 中null 的等价物是Nothing,所以你的支票应该是:

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

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

If editTransactionRow.pay_id <> DbNull.Value Then
    ...
End If

【讨论】:

    【解决方案2】:

    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 String.IsNullOrEmpty(editTransactionRow.pay_id1) = False Then stTransactionPaymentID = editTransactionRow.pay_id1 '检查空值 End If
    • 阅读我所写的内容。如果它是假的,你可以比较你的 INT 而不使用字符串...
    【解决方案3】:

    如果您使用的是强类型数据集,那么您应该这样做:

    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。

    【讨论】:

    • 你确定上面的语法有效吗? ediTransactionRow.Ispay_id1Null 是什么?
    • 为什么是If Not ediTransactionRow.Ispay_id1Null Then?变量是editTransactionRow.pay_id。你的意思是If Not ediTransactionRow.pay_id Is Null Then
    【解决方案4】:

    您也可以使用 IsDBNull 函数:

    If Not IsDBNull(editTransactionRow.pay_id) Then
    ...
    

    【讨论】:

      【解决方案5】:
      If Not IsDBNull(dr(0)) Then
          use dr(0)
      End If
      

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

      【讨论】:

        【解决方案6】:

        我觉得最安全的方法是

        If Not editTransactionRow.pay_id Is Nothing
        

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

            If String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then
                stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
            End If
            

            【讨论】:

              【解决方案9】:
              If Not editTransactionRow.pay_id AndAlso String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then
                  stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
              End If
              

              【讨论】:

                【解决方案10】:
                 If Short.TryParse(editTransactionRow.pay_id, New Short) Then editTransactionRow.pay_id.ToString()
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-08-25
                  • 2022-09-23
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-07-16
                  • 1970-01-01
                  相关资源
                  最近更新 更多