日期:2014-05-18  浏览次数:20479 次

阅读器关闭时 Read 的尝试无效
我在dbmanager类中定义了一个方法
  public static SqlDataReader GetRead(string sql, SqlParameter[] param)
{
using (SqlConnection sqlcon = new SqlConnection(constr))
{
SqlCommand sqlcom = new SqlCommand(sql, sqlcon);
sqlcom.Parameters.AddRange(param);
sqlcon.Open();
SqlDataReader reader = sqlcom.ExecuteReader();
return reader;
}
}

   
  现在我在一个类中用一个方法就收它的sqldatareader;
  public static List<User> GetAllUser()
  {
  string sql = "select * from users ";
  SqlParameter[] paraminfo = new SqlParameter[] {};
  SqlDataReader reader = DBManager.GetRead(sql,paraminfo);
  List<User> users = new List<User>();
   
  while(reader.Read())
  {
  User user = new User();
  user.Id=(int)reader["Id"];
  user.LoginId = (string)reader["LoginId"];
  user.LoginPwd = (string)reader["LoginPwd"];
  user.Address=(string)reader["Address"];
  user.Mail=(string)reader["Mail"];
  user.Name=(string)reader["Name"];
  user.Phone=(string)reader["Phone"];
  int roleid=(int)reader["UserRoleId"];
  int stateid=(int)reader["UserStateId"];
  user.Userrole=UserRoleService.GetUserRoleById(roleid);
  user.Userstate = UserStateService.GetUserStateById(roleid);
  users.Add(user);
  }
   
  return users;
  }

  结果报错:
  阅读器关闭时 Read 的尝试无效。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.InvalidOperationException: 阅读器关闭时 Read 的尝试无效。

源错误: 


行 22: List<User> users = new List<User>();
行 23:  
行 24: while(reader.Read())
行 25: {
行 26: User user = new User();
 

源文件: H:\PetShop\petshopDAL\UserService.cs 行: 24 



 各位大哥求救哇
 

------解决方案--------------------
using (SqlConnection sqlcon = new SqlConnection(constr))
{
SqlCommand sqlcom = new SqlCommand(sql, sqlcon);
sqlcom.Parameters.AddRange(param);
sqlcon.Open();
SqlDataReader reader = sqlcom.ExecuteReader();
return reader;
}

你使用了using 所有未释放资源在using结束后会自动释放
------解决方案--------------------
探讨
using (SqlConnection sqlcon = new SqlConnection(constr))
{
SqlCommand sqlcom = new SqlCommand(sql, sqlcon);
sqlcom.Parameters.AddRange(param);
sqlcon.Open();
SqlDataReader reader = sqlcom.ExecuteReader();
return reader;
}
}
你使用了using 所有未释放资源在using结束后会自…