我使用该代码
创建了一个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。
错误就是这样;
你能帮我吗?
答案 0 :(得分:3)
在数小时内进行深入研究后,我发现了2个与数据库连接有关的主要问题:
在字符串文字中使用反斜杠转义序列并不转换转义序列字符,而是应该使用一个反斜杠作为文件路径:
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);
补充参考: