当我们必须在C#.Net中使用DBNull.Value,null和“”时?

时间:2011-06-17 12:25:15

标签: c# asp.net visual-studio-2008 types

我对以下事情感到有些困惑:

  1. DBNull.Value
  2. “”
  3. 当我使用条件语句或在分配值时,我对这些事情有点困惑。有时它会抛出错误,有时它会起作用。我想知道什么时候我想用上面的东西。它们是否特定于数据类型?我需要你的宝贵建议。

3 个答案:

答案 0 :(得分:14)

null是以下两件事之一:

  • 实际指向对象的引用 - 只是一个“无”指示符(实际上,它是值0作为参考)
  • 一个Nullable<T>结构,当前没有值(HasValue属性也将返回false

DBNull特定于ADO.NET的某些部分,用于在数据库中表示null。我还没有想到他们为什么不在这里使用常规null的充分理由。

""是一个长度为零的字符串文字 - 一个完全有效但空的字符串。这样做的重要性在于null字符串和""字符串之间,像value.Trim()这样的实例方法的行为会有所不同; null.Trim()将抛出异常; "".Trim()只是""。通常,使用string.IsNullOrEmpty(value)作为测试会使这种区别消失。

答案 1 :(得分:12)

  • null是语言的内部,只是意味着对象引用当前不引用实际对象。基本上,值类型(int,bool等)和引用类型(Object,任何类等)之间的关键区别在于值类型是内存中的具体值,引用类型是指向对象表示的指针在记忆中。那个指针有时可以指向,没什么。在这种情况下,它是null。它基本上意味着“这里没有C#对象。”

  • DBNull.Value与使用数据库略有不同。数据库列可以包含null值。但是,当在代码中将该数据选择到对象(例如DataTable)中时,一个对象,就代码而言。但是,该对象包含数据库中null值的表示。因此,存在DBNull.Value来表示这种区别。它基本上意味着“这里有一个C#对象从数据库中获取一个值,但该值为null。”

  • “”(如果您想使用内置常量,则为string.Empty)是有效值。它存在,它不是null,它在各个方面都是string。它只是没有任何字符。检查此问题的有用工具是string.IsNullOrEmpty(),它会检查null或空字符串。

答案 2 :(得分:1)

null适用于C#空值。

System.DBNull.value适用于特定于数据库的NULL值。

当你使用ExecuteScalar()时,如果没有找到或返回列,它会给出null,但是找到列并且value为null然后它返回DBnull,如果value为null则表示在列中,if将返回DBnull而不是null。 / p>