1

当您想确定数据库列是否为空(即不是 null 但其中没有任何值)时,以下选项之间有什么区别:

customerRegion varchar(10) NULL从 SQL 数据库中检索:

  1. If customerRegion = "" Then
  2. If customerRegion = Nothing Then
  3. If String.IsNullOrEmpty(customerRegion) Then
  4. If customerRegion Is Nothing Then

1,2,3 返回 True 4 当列为空时返回 False。

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

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

谢谢

4

2 回答 2

2
  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- 这会很好用,但它是不必要的,因为列值永远不会是 null ( Nothing)(参见 #1)。
  4. If customerRegion Is Nothing Then- 这将永远不会返回 true(参见 #1)。
于 2012-08-21T16:01:02.770 回答
1
  • 不,它们不一样。True如果值实际上是 ,则#2 将返回Nothing。从文档中:

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

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

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

  • 您还可以进行另一项检查:IsNullOrWhitespace. 但是,如果您需要专门检测零长度的字符串,则应将它们与String.Empty.

像这样:

If customerRegion = String.Empty Then
于 2012-08-21T16:02:40.147 回答