数据读取器返回null虽然它说它有一个项目

时间:2011-08-03 19:01:06

标签: c# asp.net

你好我正在使用一个阅读器从存储过程中获取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;

3 个答案:

答案 0 :(得分:2)

首先使用IsDBNull

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

答案 1 :(得分:1)

您可以使用IsDBNull方法检查null:

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

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

答案 2 :(得分:0)

如果我记得正确,那么while(reader.Read()会让它经历一次循环,即使没有数据。虽然可能会误解。你可以尝试的几件事情就是改变它来拥有一个嵌套,如果

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

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