昨天修改了一個工具,編譯后本機運行正常,但放到服務器上執行卻不行,提示:
message:GetOleDbSchemaTable requires an open and available Connection. The connection's current state is closed
重新檢查了office相關的dll文件都在,換到安裝了offie的服務器也不行.
仔細檢查一下代碼,發現原來有段異常捕捉給屏蔽掉了(紅色部分):
using (OleDbConnection oc = new OleDbConnection(strConn)) { if (oc.State == ConnectionState.Closed) { try { oc.Open(); } catch (Exception ex) { string ss = ex.Message; } } DataTable schemaTable = oc.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null); string tableName = schemaTable.Rows[0][2].ToString().Trim(); string strSql = "Select * From [" + tableName + "]"; OleDbDataAdapter oda = new OleDbDataAdapter(strSql, oc); oda.Fill(ds); oda.Dispose(); oc.Close(); } return ds.Tables[0];
坑爹啊.找到最終的報錯信息是:OleDbConnection.Open() 時提示:未在本地計算機上注冊“Microsoft.Jet.OLEDB.4.0
百度后最終解決辦法是:在編譯時將目標CPU改為x86,一切OK了.原因是編輯時默認目標CPU為任意,但在64位的系統中運行時,會嘗試使用64位的驅動,但系統並不提供64位的驅動.
中間走了很多彎路,搜索GetOleDbSchemaTable requires an open and available Connection 問題找到的解決方案不多,試了幾個都是白廢力氣.結果是其它問題引起的.
總結經驗教訓:一定要定位到最根本的問題,再去找解決方法
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。