C# System.Data.OracleClient随机无效操作连接已关闭

C# System.Data.OracleClient随机无效操作连接已关闭,c#,oracle,C#,Oracle,我们从System.Data.OracleClient接收到一个错误:无效操作。连接已关闭。 错误随机出现,大约每1000次操作中发生1次 有什么问题吗 也许我得到了答案 连接对象的使用方式如下: [可序列化] 公共抽象类基向导:IBaseWizard { (会话是一个个性化的dbconnection对象) 即使在(!Session.IsOpen)Session.Open中有后一个检查,但在运行命令之前检查状态a后,其他一些操作可能会关闭连接,正如您所看到的,由于Session对象是静态的,新

我们从
System.Data.OracleClient
接收到一个错误:
无效操作。连接已关闭。

错误随机出现,大约每1000次操作中发生1次

有什么问题吗


也许我得到了答案

连接对象的使用方式如下:

[可序列化] 公共抽象类基向导:IBaseWizard {

(会话是一个个性化的dbconnection对象)

即使在(!Session.IsOpen)Session.Open中有后一个检查,但在运行命令之前检查状态a后,其他一些操作可能会关闭连接,正如您所看到的,由于Session对象是静态的,新操作将发现连接已关闭

问题是,如果连接不是静态的,那么这将意味着数据库中打开的连接/会话将被掠夺


是否有其他方法可以解决此问题,使连接保持静态?

许多情况可能会导致连接意外关闭。网络问题、垃圾收集等

更安全的做法是将数据命令包装在条件打开中,以确保在使用它之前具有良好的连接

 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

注意交易,正是这些交易导致了我这个问题:

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,但是有很多读取命令)。因此,异常是随机发生的…更改超时值可以使此工作正常。我花了很长时间才弄清楚,因为错误描述(无效操作。连接已关闭。)不清楚是否将其与事务问题联系起来


我不知道你的问题是否与我的问题相同,但我就是这样处理的。希望它能对你有所帮助。

你是如何使用连接的,比如每次提交时关闭连接,你是使用ORM吗?可能有很多种可能性。.检查堆栈跟踪可能有一些有用的东西,注意
throw ex;
会破坏堆栈跟踪。如果您想找出导致问题的原因,或者将其包装成一个新的异常,这样您仍然拥有内部异常的堆栈跟踪,或者使用
throw;
,这样可以让异常通过,而不是重新抛出它。@nyrguds,请注意
throw ex;
不是我提供的答案的一部分,只是想说“以您选择的方式处理错误”我知道,是的。无论如何,感谢您的帮助;我得到的异常不是任何类型的oracle异常,这让我很难正确地将其识别为连接丢失。您建议的检查
连接。状态
(可能)解决了我的问题。
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()