这里很少有类似的问题,但我找不到任何可以接受的答案。或者它实际上会起作用。
我已经创建了一个本地存储作为 .accdb 文件并尝试将 Witch C# 连接到它。
总而言之,这些是所需的部件:
public static string accessConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:\MS_Access_Test_DB.accdb";
OleDbConnection connection = new OleDbConnection(accessConnectionString);
connection.Open();
它总是崩溃,描述错误。我曾尝试使用撇号、引号等来表示
C:\MS_Access_Test_DB.accdb
我也尝试过
JET.4.0
,但出现同样的错误,并将 Persist Security Info=True;
添加到混合物中。
好的,
Steeeve & Panagiotis Kanavos 指出的问题是当我使用 64 位架构时访问驱动程序 32 位,而这将不起作用。特别是在已经有很多 Office 32 位内置插件的办公室/公司中。还有一种解决方法,可以安装两个驱动程序,但这需要每个用户都拥有它,因此在我的情况下这不是解决方案。
我更喜欢使用 SQLite,但是现在表必须连接到 PowerBI i,因为 SQLite 必须使用外部驱动程序来更新数据集,因此目前这个解决方案也已经过时了。
考虑到我不能强迫每个用户更改驱动程序等。我尝试将访问文件保存为.mdb(2002-2003)。
因此,要么是:安装 64 位驱动程序(建议初始),要么是解决方法(使用 .mdb):
public static string accessConnectionString = @"Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:\MS_Access_Test_DB.mdb";
OleDbConnection connection = new OleDbConnection(accessConnectionString);
connection.Open();
或者:
public static string accessConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MS_Access_Test_DB.mdb";
OleDbConnection connection = new OleDbConnection(accessConnectionString);
connection.Open();
重要提示,有很多 .accdb 功能无法在 .mdb 中使用,因此如果您必须使用 access,请务必小心。如果可以的话,请考虑在我的问题下的评论中提出的 SQLite/SQL SE。
编辑:我第一次也搞砸了...而不是
DataSource
我应该有 Data Source
所以它似乎可以工作,尽管使用 32 位驱动程序来对抗 64 位应用程序。
错误出现在您的连接字符串中。您必须在单词
Data
和 Source
之间添加空格,除非它不起作用
以下是正确的版本:
public static string accessConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MS_Access_Test_DB.accdb"; OleDbConnection connection = new OleDbConnection(accessConnectionString); connection.Open();