繁体   English   中英

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

[英]System.Data.OleDb.OleDbException: 'Could not find installable ISAM.' - MS Access (.accdb) and C# (.Net Framework)

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

我已经创建了一个本地存储 as.accdb 文件并尝试将女巫 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,我现在 SQLite 必须使用外部驱动程序来更新数据集,因此目前,这个解决方案也已经过时了。

考虑到我不能强迫每个用户更改驱动程序等。我尝试将访问文件保存为 .mdb (2002-2003)。

所以它是:安装 64 位驱动程序(建议的初始值)或解决方法(with.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 位应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM