程式執行過程中遇到“ORA-03114: not connected to ORACLE”的問題解決

liuxixi發表於2017-06-22

c#,winform程式,資料批量入oracle庫時用到DataAdaper的.FillSchema函式,如:da.FillSchema(dt2, SchemaType.Mapped);

程式執行一段時間後在此出現中斷,錯誤提示:ORA-03114: not connected to ORACLE。

經從網上查詢相關解決方案,有說重啟應用程式的;有說這是此函式本身的一個bug,需要新增什麼微軟官方所說的解決方案的。

經本人試驗,重啟應用程式是會變好。但是執行過程中還會難免出現上面的錯誤,這時候就還需要重啟程式,所以並不是長久之計。

後經試驗,只在資料庫服務一停,上述問題必定會出現。也就是說只要出現過資料庫連線斷開的情況(比如資料庫伺服器斷電導致網路斷開,從而程式中連線資料庫的地方中斷),那麼即使後面資料庫與程式連線又可以恢復正常,那麼此處還是會報ORA-03114: not connected to ORACLE的錯誤。說明資料庫連線仍不可用。

而且經查DataAdapter.FillSchema()函式官方文件:The connection object associated with the SelectCommand must be valid,but it does not need to be open. If the connection is closed before FillSchema is called, it is opened to retrieve data and then closed. If the connection is open before FillSchema is called, it remains open.

說明此函式執行時,必須保證資料庫連線可用,而且函式本身自動會開啟連線,用然後再關閉。如果本身就是開啟狀態,那仍會保持開啟狀態不變。

經除錯試驗,改為如下方案:

try
{
da.FillSchema(dt2, SchemaType.Mapped);
}
catch (OracleException ex)
{
try{
cnnOracle = new OracleConnection(strCnnOracle);//strCnnOracle為資料庫連線字串。
cnnOracle.Open();
}
catch(OracleException ex2)
{
return  ex2.Message;
}
}

也就是說,增加了try catch,在catch中重新例項化連線,並將連線開啟即可。

相關文章