不能使用WinForms c#应用程序打开MDB (Access)文件,即使它存在

本文关键字:文件 Access 存在 MDB WinForms 应用程序 不能 | 更新日期: 2023-09-27 18:15:37

使用以下代码:

OleDbConnection con = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:''MyFolder''MyFile.mdb");
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = con;
cmd.CommandText = sql;
con.Open();
recordsAffected = cmd.ExecuteNonQuery();
con.Close();

我得到以下错误:

类型为' system . data . oledb . oledbeexception '的未处理异常发生在System.Data.dll

附加信息:无法找到文件'C:'MyFolder'MyFile.mdb'.

这是在WinForms应用程序(c#)中。该文件存在于该文件夹中。我正在以管理员用户的身份运行应用程序。

仅供参考,当我尝试使用System.IO.File.Exists(@"C:'MyFolder'MyFile.mdb")时,它返回false,表示该文件不存在。但是,我可以在这个文件夹中看到mdb。

不能使用WinForms c#应用程序打开MDB (Access)文件,即使它存在

这个连接字符串应该可以工作:

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;数据源=C:'MyFolder'MyFile.mdb;Jet OLEDB:Database Password=");

问题发生了,因为我的SQL语法击中了Access DB。

如果您指定一个点语法(IE: SELECT * FROM [schemaname].[tableame]), OLEDB驱动程序将假定[schemaname]是MDB文件名,并将用该文件名替换连接字符串文件中指定的文件名/位置。

我的模式名称恰好与文件名完全相同,因此它试图在错误的位置找到MDB文件。

我所要做的就是修改我的查询SELECT * from [schemaname]。[tablename] to SELECT * FROM [tablename]一切正常

可能是它正在从我们的应用程序位置查找文件,例如/bin/debug调试您的连接对象以查看数据源路径,它将给您提示问题