未在本地計算機上注冊“Microsoft.Jet.OLEDB.4.0


昨天修改了一個工具,編譯后本機運行正常,但放到服務器上執行卻不行,提示:

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 問題找到的解決方案不多,試了幾個都是白廢力氣.結果是其它問題引起的.

總結經驗教訓:一定要定位到最根本的問題,再去找解決方法

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com