【问题标题】:SqlDataReader - how to discover that column is emptySqlDataReader - 如何发现该列为空
【发布时间】:2014-04-21 14:49:44
【问题描述】:

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

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

这是一项必要的工作,但我不喜欢这样(这是一种技巧,而不是解决方案) 你能告诉我如何正确优雅地做到这一点吗?

【问题讨论】:

  • 当您说“空”时,是否包括空值?你只关心 var/char 类型的列吗?
  • @attila 1.NO 2.我对 int 类型的列感兴趣

标签: c# tsql sqldatareader is-empty


【解决方案1】:

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 作为空值,则需要自定义处理。

【讨论】:

    【解决方案2】:

    我就是这样做的

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

    如果是整数

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

    【讨论】:

      【解决方案3】:

      另一种可能性是使用可为空的类型。例如:

      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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多