使用Nothing,= Nothing或IsNullOrEmpty确定空列

时间:2012-08-21 15:52:56

标签: sql vb.net nothing isnullorempty

如果要确定数据库列是否为空(即非空但是没有任何值),以下选项之间有什么区别:

从SQL数据库中检索

customerRegion varchar(10) NULL

  1. If customerRegion = "" Then
  2. If customerRegion = Nothing Then
  3. If String.IsNullOrEmpty(customerRegion) Then
  4. If customerRegion Is Nothing Then
  5. 1,2,3返回True 4当列为空时返回False。

    1和2在技术上是一样的吗?为什么4返回False?

    在1,2和3中哪一个应该用于确定列是否为空(或者是否有其他方法)?

    由于

2 个答案:

答案 0 :(得分:1)

  1. If customerRegion = "" Then - 此测试用于查看列是否包含空(0长度)字符串。这是“最佳”选项,因为该值永远不会是Nothing。如果列值为null,则它将等于DBNull,而不是Nothing
  2. If customerRegion = Nothing Then - 这非常令人困惑,因为很多人会认为它可与#4(Is Nothing)互换。当您测试字符串是否等于Nothing时,VB.NET会自动将Nothing视为空字符串。这就是它评估为True的原因。
  3. If String.IsNullOrEmpty(customerRegion) Then - 这样做效果很好,但由于列值永远不会为空(Nothing)(参见#1),因此没有必要。
  4. If customerRegion Is Nothing Then - 这永远不会返回true(见#1)。

答案 1 :(得分:1)

  • 不,他们不一样。如果值实际为True,则#2将返回Nothing。来自documentation
  

对于Visual Basic中的字符串,空字符串等于Nothing。因此,“”=没有什么是真的。

因此,该行为与使用字符串的= Nothing的VB特定处理有关。

  • 数字4返回False,因为该字符串为空,但不是Nothing

  • 您可以执行另一项检查:IsNullOrWhitespace。但是如果你需要特别检测零长度的字符串,你应该将它们与String.Empty进行比较。

像这样:

If customerRegion = String.Empty Then