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

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

 

posted @ 2014-07-11 16:49  踏叶乘风  阅读(1051)  评论(0编辑  收藏  举报