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

时间:2017-02-03 06:02:35

标签: c# winforms ms-access oledb

我使用该代码

创建了一个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。

错误就是这样;

enter image description here

你能帮我吗?

1 个答案:

答案 0 :(得分:3)

在数小时内进行深入研究后,我发现了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);
    
  3. 补充参考:

    Unrecognized MDB created by ADOX