System.Data.OleDb.OleDbException:“找不到可安装的 ISAM。” - MS Access (.accdb) 和 C# (.Net Framework)

问题描述 投票:0回答:2

这里很少有类似的问题,但我找不到任何可以接受的答案。或者它实际上会起作用。

我已经创建了一个本地存储作为 .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;
添加到混合物中。

c# ms-access ado.net
2个回答
1
投票

好的,

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 位应用程序。


0
投票

错误出现在您的连接字符串中。您必须在单词

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();

© www.soinside.com 2019 - 2024. All rights reserved.