10

如果数据行(dr)中的列为空,我有以下代码似乎会爆炸。从数据行中解析出值并处理空检查的正确方法是什么?

Person person = new Person()
{
    FirstName = dr["FirstName"].ToString(),
    LastName = dr["LastName"].ToString(),
    BusinessPhoneNumber = dr["BusinessPhone"].ToString(),
4

5 回答 5

10

如果列是字符串类型,但可以为空,那么尝试一下:

// FirstName must allow null
FirstName = dr["FirstName"] as string

或者

// FirstName would be empty for a NULL in the database
FirstName = (dr["FirstName"] as string) ?? string.Empty 
于 2009-11-21T14:45:11.623 回答
4

我相信,数据单元格为空不能成为您问题的原因。也许该列不存在,或者发生了任何其他错误,或者 DataRow 本身为空,您应该处理它。查看异常 - “似乎爆炸”不是对您的问题的有效描述。

以下解释了这一点,但也会为其他所有人回答标题中的问题。

如果列值为 null,System.DBNull则返回一个对象,并.ToString()返回一个空字符串,while(string)as stringreturn null

所以检查返回的项目是没有意义的,==null因为它永远不会评估为true.

  • 如果您接受空字符串作为结果,则您的代码已经是最佳的,无需处理这种DBNull情况。
  • 如果要获取null,请更改.ToString()as string
  • 如果您想以任何其他方式处理它,if (dr.IsNull("FirstName"))==nullas string.
于 2014-09-12T08:18:15.850 回答
2

dr["FirstName"].ToString()偶尔会抛出空指针异常,因为您试图访问ToString空对象。除此之外,字符串可以为空,所以说真的,如果你知道它是一个字符串,并且你不介意它是空的,那么这样做是安全的

FirstName = (String) dr["FirstName"]
于 2009-11-21T14:46:06.740 回答
1

将列和默认值传递给辅助函数,该函数检查是否为 null,如果为 null,则返回默认值,如果不为 null,则返回列值。

于 2009-11-21T14:44:51.047 回答
1

如果列为空,您可以使用以下内容返回空白字符串。

FirstName = string.format("{0}", dr["FirstName"])
于 2009-11-21T14:48:14.083 回答