如果单元格可能为null,则从数据行读取的正确方法是什么

leo*_*ora 10 c# null datarow

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

Person person = new Person()
{
    FirstName = dr["FirstName"].ToString(),
    LastName = dr["LastName"].ToString(),
    BusinessPhoneNumber = dr["BusinessPhone"].ToString(),
Run Code Online (Sandbox Code Playgroud)

Joã*_*elo 10

如果列的类型为string,但是可以为空,那么尝试:

// FirstName must allow null
FirstName = dr["FirstName"] as string
Run Code Online (Sandbox Code Playgroud)

要么

// FirstName would be empty for a NULL in the database
FirstName = (dr["FirstName"] as string) ?? string.Empty 
Run Code Online (Sandbox Code Playgroud)


maf*_*oft 5

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

下面解释一下,同时也为大家解答一下标题中的问题。

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

因此,检查返回的项目是没有意义的,==null因为它永远不会计算为true

  • 如果您接受空字符串作为结果,则您的代码已经是最佳的,无需处理这种DBNull情况。
  • 如果你想得到null,就.ToString()改为as string
  • 如果您想以任何其他方式处理它,if (dr.IsNull("FirstName"))==nullas string.