System.Data.OracleClient random Invalid操作关闭连接
本文关键字:连接 操作 Invalid Data OracleClient random System | 更新日期: 2023-09-27 17:50:05
System.Data.OracleClient
: Invalid operation. The connection is closed.
出现错误
错误随机出现,发生率约为1/1000。
有什么问题吗?
也许我知道答案了。
连接对象是这样使用的:
(序列化)公共抽象类BaseWizard: IBaseWizard{
[NonSerialized]
protected static ISession _session;
protected static ISession Session
{
get
{
if (_session == null)
_session = Session.Create(ConnectionType.DEFINED);
return _session;
}
}
}
(Session是一个个性化的dbconnection对象)
,即使后面有检查if (!Session. isopen) Session。打开有可能在运行命令之前检查状态a之后,一些其他操作可能会关闭连接,并且正如您所看到的Session对象是静态的,新操作将发现连接已关闭
问题是,如果连接不是静态的,这将意味着数据库中打开的连接/会话的掠夺
是否有另一种方法来解决这个问题,使连接保持静态?
注意事务,它们是导致我出现这个问题的原因:
System.InvalidOperationException: Invalid operation. The connection is closed.
at System.Data.OracleClient.OracleConnection.GetOpenInternalConnection()
at System.Data.OracleClient.OracleConnection.get_ErrorHandle()
at System.Data.OracleClient.OracleDataReader.ReadInternal()
at System.Data.OracleClient.OracleDataReader.Read()
at Microsoft.Practices.EnterpriseLibrary.Data.Oracle.OracleDataReaderWrapper.Read()
默认的TransactionScope超时是60秒,但我的记录过程有时会超过这个时间(我应该只在这个过程中写代码到DB,但是有很多读取命令)。所以异常是随机发生的……更改超时值可以使其工作。我花了很长时间才弄清楚,因为错误的描述(无效的操作。连接已关闭。)不清楚将其与事务问题联系起来。
我不知道你的问题是否和我的一样,但我就是这样处理的。
有许多情况可能导致连接意外关闭。网络问题,垃圾收集等
将data命令包装在条件打开中更安全,以确保在使用它之前有良好的连接。
if (this.mDBConnection.State != System.Data.ConnectionState.Open)
{
try
{
this.mDBConnection.ConnectionString = this.mDBConnectionString;
this.mDBConnection.Open();
}
catch (System.Exception ex)
{
ret = false;
throw ex;
}
}
虽然这并不能回答"是什么导致了这个问题",但它有望提供一个解决方案,以防止它成为进一步的问题。
欢呼,
CEC