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中重新實例化連接,並將連接打開即可。