尝试打开 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 个关于数据库连接的主要问题:
在字符串文字中使用反斜杠转义序列不会转换转义序列字符,相反,您应该对文件路径使用一个反斜杠:
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);
附加参考:
我用那个代码创建了一个 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 个关于数据库连接的主要问题:
在字符串文字中使用反斜杠转义序列不会转换转义序列字符,相反,您应该对文件路径使用一个反斜杠:
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);
附加参考: