我们收到来自System.Data.OracleClient
的错误:Invalid operation. The connection is closed.
该错误随机出现,每1000次操作中发生的概率约为1。
可能是什么问题呢?
也许我得到了答案。
连接对象的用法如下:
[可序列化]
公共抽象类BaseWizard:IBaseWizard
{
[NonSerialized]
protected static ISession _session;
protected static ISession Session
{
get
{
if (_session == null)
_session = Session.Create(ConnectionType.DEFINED);
return _session;
}
}
}
(会话是一个个性化的dbconnection对象)
并且即使后面检查了(!Session.IsOpen)Session.Open是否也有可能,在检查状态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秒,但是我的记录过程有时花费的时间更多(在此过程中,我应该只将代码写入数据库,但是有很多读取命令)。因此,异常是随机发生的...更改超时值可使其正常工作。我花了很长时间才弄清楚它,因为不清楚该错误的描述(无效的操作。该连接已关闭。)将其与事务问题链接起来并不明确。
我不知道您的问题是否与我的相同,但这就是我的处理方式。希望它能对您有所帮助。
关于c# - System.Data.OracleClient随机无效操作连接已关闭,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5664500/