未在本地计算机上注册“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 问题找到的解决方案不多,试了几个都是白废力气.结果是其它问题引起的.

总结经验教训:一定要定位到最根本的问题,再去找解决方法

 

你可能感兴趣的:(Microsoft)