尝试打开访问 97 数据库时无法识别的数据库格式

Posted

技术标签:

【中文标题】尝试打开访问 97 数据库时无法识别的数据库格式【英文标题】:Unrecognized Database Format While trying to open access 97 database 【发布时间】:2017-02-03 06:02:35 【问题描述】:

我用该代码创建了一个 mdb (Access Database 97) 文件,

  string DBPath = @"C:\\Users\\Desktop\\test.mdb";

        // create DB via ADOX if not exists
        if (!File.Exists(DBPath))
        
            ADOX.Catalog cat = new ADOX.Catalog();
            cat.Create("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DBPath);
            cat = null;
        

        // connect to DB
        OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DBPath);
        con.Open();

当我尝试打开创建的数据库时,它会给出“无法识别的数据库格式”错误。

我使用的是 Microsoft Access 97 ,我猜它是 32 位的。 我从 C# 尝试了所有平台目标(x86、x64 和任何 CPU),但仍然是同样的问题。

我的电脑上安装了access 97和Microsoft Office 2010。

错误是这样的;

你能帮帮我吗?

【问题讨论】:

我看到您正在尝试连接 ACE OLEDB 12.0 驱动程序,而不是使用 Jet OLEDB 驱动程序。仅对 MS Access 97/2000 使用 Jet OLEDB 驱动程序。 如何在构建选项上定位 C#project? Jet OLEDB Database Driver 的名称是什么,我在参考资料中找不到? 已将“Microsoft.ACE.OLEDB.12.0”更改为“Microsoft.Jet.OLEDB.4.0”,但在打开 mdb 文件时仍然出现同样的错误 它现在应该适用于给定的连接字符串,尝试与之连接。检查MDB文件是否存在且没有损坏。 我正在新建“mdb”文件,没有损坏!没用的哥们.. 【参考方案1】:

经过数小时的深入研究,我发现了有关数据库连接的两个主要问题:

    在字符串文字中使用反斜杠转义序列不会转换转义序列字符,而是应该使用一个反斜杠作为文件路径:

    string DBPath = @"C:\Users\Desktop\test.mdb";
    

    与相关 Access 数据库连接的连接字符串提供程序使用 Microsoft ACE OLE DB 12.0,仅 Access 2007 及更高版本支持 ACCDB 格式(改用 Microsoft Jet 4.0 provider)。

    另外,在包含ADOX.Catalog.Create()方法的数据库创建部分,它应该包含Jet OLEDB:Engine Type参数来指定使用哪个Access版本。默认设置为Jet OLEDB:Engine Type=5,这意味着Access 2000 文件格式(将在Access 97 中触发unrecognized database format 错误),因此要强制ADOX 创建具有Access 97 格式的MDB,需要设置Engine Type=4,如下所示:

    // database creation
    if (!File.Exists(DBPath))
    
        ADOX.Catalog cat = new ADOX.Catalog();
        cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DBPath + ";Jet OLEDB:Engine Type=4");
        // other stuff
    
    
    // connect to database using Jet OLE DB provider
    OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DBPath);
    

补充参考:

Unrecognized MDB created by ADOX

【讨论】:

以上是关于尝试打开访问 97 数据库时无法识别的数据库格式的主要内容,如果未能解决你的问题,请参考以下文章

Excel数据连接 - 无法识别的数据库格式

用ACCESS数据库提示 无法识别的数据库格式

MS Access .accdb 文件为其他打开,但给了我“无法识别的数据库格式”

win7电脑本地连接黄色感叹号,未识别的网络,无网络访问

打开 segue 时无法识别的实例选择器

从 C# 连接到 .accdb。 “无法识别的数据库格式”错误