我们收到来自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/

10-11 01:39
查看更多