【问题标题】:Data Reader Returning null although it says it has an item there数据阅读器返回 null 尽管它说它有一个项目
【发布时间】:2011-08-03 19:01:06
【问题描述】:

你好,我正在使用阅读器从存储过程中获取 XML。现在,如果存储过程没有找到任何内容,则返回 null ..在我正在测试的情况下..它不应该返回任何内容,但我的代码是失败..它说有一行..但是当它到达 reader.GetString(0);它说Data is Null. This method or property cannot be called on Null values.

如何检查 null int hat line XML = XML + reader.GetString(0);?它正在通过 while(reader.Read() && reader.HasRows) 检查..当我调试它说有一个项目但是当它到达上面提到的行时它会抛出 Data is null 错误。我该如何解决这个问题?

这是我的代码

   SqlDataReader reader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);

        string XML = "";

        while (reader.Read() && reader.HasRows)
        {
               XML = XML + reader.GetString(0); 
        }

        XML = "<ProductList>" + XML + "</ProductList>";

        reader.Close();
        myConnection.Close();

        return XML;

【问题讨论】:

  • 与答案无关,但“xmlOut”是什么
  • 啊这是一个错误..现在改变
  • 所以问题是我如何检查那个空值?,这样它就不会导致错误
  • 问题是它通过了 while() 检查...并在此处抛出错误 XML = XML + reader.GetString(0);
  • 仅供参考,我认为 reader.Read() && reader.HasRows 是多余的,你真正需要的是 while(reader.Read()),如果你想让它更干净,你应该这样做: if (reader .HasRows) { while (reader.Read()) { // 东西 } }

标签: c# asp.net


【解决方案1】:

首先使用IsDBNull

if (!reader.IsDBNull(0))
{
    XML = XML + reader.GetString(0); 
}

【讨论】:

    【解决方案2】:

    您可以使用 IsDBNull 方法检查是否为空:

    while (reader.Read())         
    {
        if (!reader.IsDBNull(0))
        {        
            XML = XML + reader.GetString(0)
        }
    }
    

    更新删除了 reader.HasRows 调用,因为它是多余的(正如其他人所指出的那样)。

    【讨论】:

      【解决方案3】:

      如果我没记错的话,即使没有数据,while (reader.Read() 也会让它通过循环一次。但可能会出错。你可以尝试的几件事是将其更改为如果喜欢就嵌套

      while(reader.read())
      {
           if(reader.HasRows)
           {
            XML = XML + reader.GetString(0);
           }
      }
      

      我会将 GetString(0) 更改为 GetValue(0).ToString();可能没有区别,但当涉及空值时,GetString 和 GetValue 的行为不同。

      【讨论】:

      • 不这样做{}while()
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多