如何在 VB.NET 中检查 Null 值

Posted

技术标签:

【中文标题】如何在 VB.NET 中检查 Null 值【英文标题】:How to check for a Null value in VB.NET 【发布时间】: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? 【参考方案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()

【讨论】:

以上是关于如何在 VB.NET 中检查 Null 值的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 vb .net 项目的 sql server 中是不是存在数据库和表?

如何在 VB.NET 中检查 TCP 服务器(套接字)与 TCP 客户端的连接状态

如果一个启动另一个,您如何在 VB.Net 中跨项目进行调试?

如何检查字节是不是为空 vb.net

vb.net 里面如何判断某个值存在一个数组中?

如何将 vb.net 中日期的空值传递给 sql 存储过程?