我在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结束后会自动释放
------解决方案--------------------------------------------------------