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

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

  • 相关阅读:
    adjacent_diffenerce
    数值算法速食食谱
    accumulate
    平面分割
    进制转换
    奖学金
    谁考了第k名
    奇数单增序列
    病人排序
    灯的开关状态
  • 原文地址:https://www.cnblogs.com/champaign/p/3838109.html
Copyright © 2020-2023  润新知