码迷,mamicode.com
首页 > 数据库 > 详细

未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0

时间:2014-07-13 08:24:44      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   文件   os   

昨天修改了一个工具,编译后本机运行正常,但放到服务器上执行却不行,提示:

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.Jet.OLEDB.4.0,布布扣,bubuko.com

未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0

标签:style   blog   color   使用   文件   os   

原文地址:http://www.cnblogs.com/champaign/p/3838109.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!