尝试打开访问 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 数据库时无法识别的数据库格式的主要内容,如果未能解决你的问题,请参考以下文章