先看下出现问题的代码数据访问层有方法GetAll()
{
……"select * form messages";
Ilist<User> list=new List<User>();
……
DataReader reader=Dbhelp.GetReader(sqlStr); //Dbhelp公用类中有GetReader方法 返回datareader
while(reader.read())
{
User user=new User(); //User是实体类
user.Id=(int)reader["id"];
int userStateId=(int)reader["userStateId"];
……
user.UserState=GetUserStateById(userStateId); //GetUserStateById是根据userStateId返回userState对象 其中用到了dataReader
list.add(user);
}
reader.close();
……
}主要代码如上面所写的 ,这种情况下回 提示datareader未关闭 希望大侠指点下 书本上就这么写的 没有出错 但是我敲出来后就 错了
先谢谢了
{
……"select * form messages";
Ilist<User> list=new List<User>();
……
DataReader reader=Dbhelp.GetReader(sqlStr); //Dbhelp公用类中有GetReader方法 返回datareader
while(reader.read())
{
User user=new User(); //User是实体类
user.Id=(int)reader["id"];
int userStateId=(int)reader["userStateId"];
……
user.UserState=GetUserStateById(userStateId); //GetUserStateById是根据userStateId返回userState对象 其中用到了dataReader
list.add(user);
}
reader.close();
……
}主要代码如上面所写的 ,这种情况下回 提示datareader未关闭 希望大侠指点下 书本上就这么写的 没有出错 但是我敲出来后就 错了
先谢谢了
con.close();
然后再
con.open();
{
……"select * form messages";
Ilist<User> list=new List<User>();
……
DataReader reader=Dbhelp.GetReader(sqlStr); //Dbhelp公用类中有GetReader方法 返回datareader
while(reader.read())
{
User user=new User(); //User是实体类
user.Id=(int)reader["id"];
int userStateId=(int)reader["userStateId"];
……
user.UserState=GetUserStateById(userStateId); //GetUserStateById是根据userStateId返回userState对象 其中用到了dataReader
list.add(user);
}
reader.close();
……
}
注意异常退出的情况
当while 的时候 这个表不能再被别的语句操作
还有reader 用法嘛要谨慎,这种编程法是对客户不负责任,哪天指不定就系统BUG //如果dr能读到数据
if (dr.HasRows)
{
//循环读取(多个就会循环读取)
while (dr.Read())
{
...
}
}
dr.Close();//记住你用的DataReader一定要关闭。
建议用DataAdapter 少用或避免用DataReader