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

Unrecognized Database Format While trying to open access 97 database

我用那个代码创建了一个 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();

当我尝试打开创建的数据库时,出现 "unrecognized database format" 错误。

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

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

错误是这样的;

你能帮帮我吗?

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

  1. 在字符串文字中使用反斜杠转义序列不会转换转义序列字符,相反,您应该对文件路径使用一个反斜杠:

    string DBPath = @"C:\Users\Desktop\test.mdb";
    
  2. 与问题中的 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