错误提示:阅读器关闭时READ的尝试无效

从数据访问层中返回的SqlDataReader为何不可用?错误提示:阅读器关闭时READ的尝试无效
分析:在finally中关闭了数据库连接对象,无论任何原因退出try块的时候,都会执行finally里的内容!
解决:使SqlDataReader.Close()时,数据连接也会自动关闭.
System.Data.SqlClient.SqlDataReader sdr = mycmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);

 


连接关闭后不能再使用Reader了

保持一个原则:最晚连接数据库,用完立即关闭连接

reader当然可以return。
其实不用Dispose,用

cmd.ExecuteReader(CommandBehavior.CloseConnection);
那么当你在任意地方关闭这个return的reader的时候,这个reader所使用的连接也会关闭。

 

自己修改的

            public OracleDataReader Select(string selString)
            {
                OracleDataReader dr = null;
                OracleConnection conn = null;
                try
                {
                    conn = new OracleConnection(connStr);
                    OracleCommand sqlCmd = conn.CreateCommand();
                    sqlCmd.CommandType = CommandType.Text;
                    sqlCmd.CommandText = selString;
                    conn.Open();
                    dr = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection);
                    //sqlCmd.Dispose();
                    //conn.Close();
                }
                catch (Exception ee)
                {
                    throw ee;
                }
                //finally
                //{
                //    conn.Close();
                //}
                return dr;
            }

 

改成上面的样子就可以了,可是不知道以后咋关闭啊?!Close了Reader就自动关闭了?!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 这个错误是Java数据库连接出现的一种异常,意思是输入/输出错误:套接字读取超。这通常是由于网络连接不稳定或数据库服务器响应间过长导致的。建议检查网络连接和数据库服务器状态,以确保它们正常运行。如果问题仍然存在,可以尝试增加连接超间或调整数据库连接参数。 ### 回答2: java.sql.SQLRecoverableException是Java数据库异常,它表明执行SQL语句遇到了可恢复的错误,这并不表明异常已经无法修复,而是表明程序出现了某种服务不稳定或网络瞬间连接断开等问题所导致的异常。 其中,IO错误:socket read timed out(IO异常:套接字读取超)表示程序读取数据库信息,由于读取等待间超过了指定间,导致出现了读取超错误。 在解决此问题,可以尝试以下步骤: 1. 确保数据库连接的网络稳定以及网络带宽充足:网络不稳定、带宽过小等原因会导致程序读取数据库信息的等待间加长,从而出现超错误。 2. 增加连接超间:可以在程序连接数据库的候增加超间,以充分等待数据库返回信息,防止出现读取超错误。 3. 使用更高效的数据库连接方式:可以使用连接池技术或者JPA等高效的数据库连接方式,减少程序与数据库之间的连接间。 4. 升级或修改JDBC驱动程序:某些版本的JDBC驱动程序可能存在一些漏洞或者缺陷,导致程序出现IO错误,因此可以尝试升级JDBC驱动程序或者修改其中的配置参数,以修复异常。 ### 回答3: java.sql.sqlrecoverableexception: io错误:socket read timed out是Java异常中的一种,其出现的原因是Java程序尝试连接到数据库,连接操作超了。通常在这种情况下,应用程序无法获取所需的数据,或者可能会导致数据连接中断。这个错误通常是由以下几种情况引起的: 第一种情况是:网络连接问题。可能存在网络连接问题,导致请求与响应之间的通信中断。这可能是由于路由器故障,网络故障或其他网络连接问题引起的。 第二种情况是:重量级的数据库查询操作。如果程序需要查询大量的数据,而且该数据比较复杂,那么这可能会导致网络连接超。在这种情况下,建议考虑对查询进行分解,以便能够更快地获取所需的数据。 第三种情况是:Java应用程序或数据库出现问题。这可能是由于应用程序或数据库本身存在问题,导致网络连接异常中断。如果是这种情况,通常需要查找应用程序的日志文件以了解更多信息。 如果遇到了这个问题,可能需要以下几种解决方案:第一,检查网络连接是否正常;第二,尝试优化数据库查询操作;第三,检查应用程序或数据库是否有可用更新或修补程序。总之,在解决这个问题之前应该尝试理解问题的原因,以便能够找到正确的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值