数据读取返回(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[0]但第二次迭代肯定是reader[1]有关,因此您想使用
reader.GetString(0)
不是 reader[0].ToString();
为什么使用reader[0].ToString();
这将获取您的第一个记录并在第二次迭代时给出错误。
reader["ColumnsName"].ToString();