SqlDataReader - 如何发现该列为空

时间:2014-04-21 14:49:45

标签: c# tsql sqldatareader is-empty

我尝试读取查询结果并发现某些列是否为空 这是我开始的一种方式:

SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
    rdr["ColumnName"]; // how do I know if it has a value or empty
}

我想:

dr[4].ToString() == String.Empty

它需要工作,但我不喜欢这个(这是一个黑客而不是解决方案) 你能告诉我如何正确而优雅地做到这一点吗?

3 个答案:

答案 0 :(得分:3)

int值不存在空,使用数据库时正确的是使用 Null ,这是唯一真正的"空"。

SqlDataReader rdr = cmd.ExecuteReader();
int colIndex = read.GetOrdinal("MyColumnName");

while (rdr.Read())
{
    // [true | false] your validation goes here!; 

    if (rdr.IsDBNull(colIndex)){
       //value is  null
    }
}

请注意,如果你想使用0,""或1/1/1900为空值,需要定制处理。

答案 1 :(得分:1)

我就是这样做的

string UserInitialssql = rdr.IsDBNull(2) ? String.Empty : rdr.GetString(2);

如果是Int

Int32? i = rdr.IsDBNull(2) ? (Int32?)null : rdr2.GetInt32(2);

答案 2 :(得分:0)

另一种可能性是使用可空类型。 e.g:

SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
    int? someNumber = rdr["ColumnName"] as int?;
    if (someNumber == null)
        // was NULL in database
    else 
       // use  someNumber.Value   to get int
}