数据读取返回(Reader关闭时无效的读取尝试)

本文关键字:读取 无效 返回 Reader 数据 | 更新日期: 2023-09-27 18:04:18

我试图读取查询返回的XML,我测试了查询,它正在返回具有正确项目的XML。但是后面的代码有一个问题,它正确地读取了第一项,但随后抛出了异常。我不确定什么是错的(异常发生第二次它试图通过WHILE循环。参见下面的代码

 // Create Instance of Connection and Command Object
        SqlConnection myConnection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["myConnection"].ConnectionString);
        SqlCommand myCommand = new SqlCommand("GetItemsXML", myConnection);
        // Mark the Command as a SP
        myCommand.CommandType = CommandType.StoredProcedure;
        // Add Parameters to SP
        SqlParameter parameterPortalID = new SqlParameter("@TheID", SqlDbType.Int, 4);
        parameterPortalID.Value = portalID;
        myCommand.Parameters.Add(parameterPortalID);
        SqlParameter parameterKeywords = new SqlParameter("@myWords", SqlDbType.VarChar, 4000);
        parameterKeywords.Value = myWords;
        myCommand.Parameters.Add(parameterWords);

        // Execute the command
        myConnection.Open();
        SqlDataReader reader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
        string xmlOut = "";
        while (reader.Read()) //SECOND ITERATION THROWS (Invalid attempt to read
                              // when reader is closed)
        {
            xmlOut = xmlOut + reader[0].ToString();
        }
        xmlOut = "<MyItemsList>" + xmlOut + "</ZMyItemsList>";
        reader.Close();
        myConnection.Close();
        return xmlOut;
    }

数据读取返回(Reader关闭时无效的读取尝试)

这可能与第一次迭代是reader[0]但第二次迭代肯定是reader[1]有关,因此您想使用

 reader.GetString(0)
不是

 reader[0].ToString();

为什么使用reader[0].ToString();这将获取您的第一个记录并在第二次迭代时给出错误。

reader["ColumnsName"].ToString();