阅读器关闭时 MetaData 的尝试无效。

heheerwa 2009-09-25 08:34:55
 public static List<Book> GetAllBook()
{
List<Book> books = new List<Book>();
string sql = "select * from books";
using (SqlDataReader reader = DBHelper.GetDataReader(sql))
{
while (reader.Read())
{
Book book = new Book();
book.Id = Convert.ToInt32(reader["id"]);
book.Title = reader["Title"].ToString();
book.Author = reader["Author"].ToString();
book.PublishDate = reader["PublishDate"].ToString();
book.ISBN = reader["ISBN"].ToString();
book.WordsCount = Convert.ToInt32(reader["WordsCount"]);
book.UnitPrice = Convert.ToDouble(reader["UnitPrice"]);
book.ContentDescription = reader["ContentDescription"].ToString();
book.AurhorDescription = reader["AurhorDescription"].ToString();
book.EditorComment = reader["EditorComment"].ToString();
book.TOC = reader["toc"].ToString();
book.Clicks = Convert.ToInt32(reader["Clicks"]);

book.Publisher = BookPublisherServer.GetPublisherById(Convert.ToInt32(reader["publisherId"]));
int test = Convert.ToInt32(reader["publisherId"]);
Console.WriteLine(test);
book.Category = BookCategoryService.CetCategorById(test);
books.Add(book);
}
reader.Close();
return books;
}
}

GetPublisherById的方法:
public static Publisher GetPublisherById(int publisherId)
{
string sql = "select * from publishers where id = @id";
using (SqlDataReader reader = DBHelper.GetDataReader(sql, new SqlParameter("@id", publisherId)))
{
if (reader.Read())
{
Publisher publisher = new Publisher();
publisher.Id = Convert.ToInt32(reader["id"]);
publisher.Name = reader["name"].ToString();
reader.Close();
return publisher;
}
else
{
reader.Close();
return null;
}
}
}

GetDataReader的方法:
   public static SqlDataReader GetDataReader(string sql)
{
SqlCommand cmd = new SqlCommand(sql, Conn);
SqlDataReader dr = cmd.ExecuteReader();
return dr;
}

public static SqlDataReader GetDataReader(string sql, params SqlParameter[] pras)
{
SqlCommand cmd = new SqlCommand(sql, Conn);
cmd.Parameters.AddRange(pras);
SqlDataReader dr = cmd.ExecuteReader();
return dr;
}

SqlConnection我封装了的:
     static string str = ConfigurationManager.ConnectionStrings["connstr"].ToString();
static SqlConnection conn;
public static SqlConnection Conn
{
get {
if (conn == null)
{
conn= new SqlConnection(str);
conn.Open();
}
else if (conn.State == System.Data.ConnectionState.Broken)
{
conn.Close();
conn.Open();
}
else if (conn.State == System.Data.ConnectionState.Closed)
{
conn.Open();
}
else if (conn.State == System.Data.ConnectionState.Open)
{
conn.Close();
conn.Open();
}
return DBHelper.conn;
}

}


代码运行到:GetAllBook里面的 int test = Convert.ToInt32(reader["publisherId"]);这里就抛出异常了!!
请问怎么解!!
...全文
143 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
heheerwa 2009-10-01
  • 打赏
  • 举报
回复
这个问题我已经解决了!!
是dbhelper没写好!造成了他们共用一个datareader!!
heheerwa 2009-09-25
  • 打赏
  • 举报
回复
还是一样的错!!
我本来刚刚开始的时候就是那样写的!!
它报错了!!
我才吧她写出去的!!
Adechen 2009-09-25
  • 打赏
  • 举报
回复
把这句
int test = Convert.ToInt32(reader["publisherId"]);
移动到
book.Publisher = BookPublisherServer.GetPublisherById(Convert.ToInt32(reader["publisherId"]));
的上面;
GetPublisherById里面已经关闭了reader
heheerwa 2009-09-25
  • 打赏
  • 举报
回复
帮我解决下这个问题呀!!!

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧