SqlDataReader的关闭问题,报错:“阅读器关闭时尝试调用 HasRows 无效”
2017-11-06 09:27
609 查看
最近在练习一个ADO.NET三层架构验证用户名登录密码时出现报错:“阅读器关闭时尝试调用 HasRows 无效”
百度了好多文章才得到解决:
先来看SqlHelper获取SqlDataReader
网上查了很多文章,原因都是说在获取到的SqlDataReader使用时连接已关闭,经调试确实如此。
原因找到后。继续找解决办法,问朋友说改用DataSet,DatzSet已将数据保存在了本地内存当中,经测试,确试职此,但是DataReader是否就不行呢?当然可行
定义下面的DataReader,此DataReader在关闭时,Connection自动关闭。
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
所以只需要在定义Reader时加上连接自动关闭的参数。
后续使用完成Readerj时,加上Reader.Close(); 即可
百度了好多文章才得到解决:
先来看SqlHelper获取SqlDataReader
public static SqlDataReader ExecuteDataReader(string sql, params SqlParameter[] Parameters) { SqlCommand cmd = new SqlCommand(); cmd.Connection = Connection; cmd.CommandType = CommandType.Text; cmd.CommandText = sql; foreach (SqlParameter p in Parameters) { cmd.Parameters.Add(p); } try { Connection.Open(); SqlDataReader reader = cmd.ExecuteReader(); return reader; } catch (Exception ex) { throw new Exception(ex.Message); } }在来看获取SqlDataReader代码:
public UserModel GetUserLoginInfoByLoginId(string LoginId) { UserModel model = null; string sql = "select loginid,password from hrmresource where loginid=@Uid"; SqlDataReader reader = SqlHelper.ExecuteDataReader(sql, new SqlParameter("@Uid", LoginId)); { if (reader.HasRows)//程序运行到这里报"阅读器关闭时尝试调用 HasRows 无效"错误 { while (reader.Read()) { model = new UserModel(); model.LoginId = reader.GetString(0); model.PassWord = reader.GetString(1); } } return model; } }
网上查了很多文章,原因都是说在获取到的SqlDataReader使用时连接已关闭,经调试确实如此。
原因找到后。继续找解决办法,问朋友说改用DataSet,DatzSet已将数据保存在了本地内存当中,经测试,确试职此,但是DataReader是否就不行呢?当然可行
定义下面的DataReader,此DataReader在关闭时,Connection自动关闭。
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
所以只需要在定义Reader时加上连接自动关闭的参数。
后续使用完成Readerj时,加上Reader.Close(); 即可
相关文章推荐
- SqlDataReader 关闭问题:阅读器关闭时尝试调用 Read 无效
- SqlDataReader的关闭问题,报错:“阅读器关闭时尝试调用 Read 无效”
- 讲一下SqlDataReader的关闭问题,出现"阅读器关闭时尝试调用 FieldCount 无效"
- 讲一下SqlDataReader的关闭问题,出现"阅读器关闭时尝试调用 FieldCount 无效"(转)
- SqlDataReader的关闭问题,报错:“阅读器关闭时尝试调用 Read 无效”
- SqlDataReader的关闭问题,报错:“阅读器关闭时尝试调用 Read 无效”
- 编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时会产生Additional information: 阅读器关闭时尝试调用 Read 无效问题,解决方法与解释
- 编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时会产生Additional information: 阅读器关闭时尝试调用 Read 无效问题,解决方法与解释
- asp.net中SqlDataReader使用时关闭数据库连接的问题(转)
- SqlDataReader的关闭问题
- 阅读器关闭时尝试调用 FieldCount 无效异常
- 阅读器关闭时尝试调用Read无效
- 阅读器关闭时尝试调用 FieldCount无效[解决方案]
- 使用ExecuteReader时报错“阅读器关闭时尝试调用Read无效”的解决办法
- 阅读器关闭时尝试调用 Read 无效
- SqlDataReader的关闭问题
- 阅读器关闭时Read的尝试无效的问题
- 阅读器关闭时尝试调用 Read 无效
- SqlDataReader的关闭问题
- 阅读器关闭时尝试调用Read无效