从 C# 连接到 .accdb。 “无法识别的数据库格式”错误
Posted
技术标签:
【中文标题】从 C# 连接到 .accdb。 “无法识别的数据库格式”错误【英文标题】:Connecting to .accdb from C#. "Unrecognized database format" errox 【发布时间】:2013-03-18 20:45:57 【问题描述】:我正在为一个客户端编写一个简短的实用程序,它将在 access 数据库上运行一系列查询,并将生成的数据表保存到一个 excel 文件中。我无法建立与访问文件的初始连接。
访问查询的设置如下:我正在连接的文件(我们称之为 Access1)存储了我需要运行的查询。查询的表位于单独的访问文件 (Access2) 中。当我尝试打开连接时,程序会抛出异常。
这是我的连接方法
private static OleDbConnection GetConnection()
var connection = new OleDbConnection
ConnectionString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=0;Persist Security Info=False", accessFilename)
;
connection.Open();
return connection;
我遵循了其他一些答案(特别是 here)的建议,但仍然收到错误消息。
我并不完全相信问题出在代码本身,因为我能够在我们办公室大约一半的计算机上成功运行该程序。这让我认为它是驱动程序或 Office 版本的问题。
我的机器(不会运行该程序)正在运行 Office 2010 64 位和 64 位 Windows 7。据我所知,这是唯一安装在此设备上的 windows/office 版本机器。
我的主管的机器(它将运行它)正在运行完全相同版本的 office 和 windows。此外,我不必在他的机器上安装任何额外的东西来运行程序。他的机器已经出现过几次了,并且可能在某个时候有早期版本的 Office 2007 或 32 位 2010。他记不清了。
成功运行的其他 office/windows 版本是 -Windows 7 64 位 / Office 2007 32 位 -Windows XP / Office 2007 32 位。
要添加另一个皱纹,如果我将文件名更改为任何其他访问文件,连接会在我的机器上打开而不会出现问题。当我这样做时,所有查询都无法运行,因为它是一个完全不同的文件,但连接打开得很好。
由于我可以成功连接到除我需要的文件之外的任何其他访问文件,我需要更改一个访问文件中的某些设置以允许外部程序连接到它吗?我认为不会,因为其他计算机可以做到这一点。
或者是否有一些驱动程序或参考或任何我忽略并需要安装才能连接到 MS Access 的东西?如果是这样,我如何才能连接到其他 Access 文件?
【问题讨论】:
Where are you assigning
accessFilename` 在你的代码中......?
您也可能想做/检查以下Change the target platform of the application to x86 instead of 'any cpu'. By doing so, your app will run under WOW64-mode on 64bit systems, and will use the 32bit Jet provider.
也检查一下microsoft.com/en-us/download/details.aspx?id=13255
顺便说一句,您可以使用 64 位 2010 驱动程序安装 2007 32 位驱动程序。
@DJ KRAZE 今天回到工作岗位,目标平台已经设置为 x86。但是,我决定切换到任何 CPU 只是为了看看。更改后,该程序可以在我尝试的任何计算机上完美运行。非常感谢你让我走上正轨。
【参考方案1】:
将目标平台更改为“AnyCPU”后,它对我有用并且能够连接到 .accdb 数据库。我使用“x86”是为了让我在 64 位机器上调试期间更改代码。谢谢 DJ KRAZE!
【讨论】:
【参考方案2】:你可以试试
Provider=Microsoft.Jet.OLEDB.4.0
或
Provider=Microsoft.ACE.OLEDB.12.0
根据访问文件。这对我有用
【讨论】:
以上是关于从 C# 连接到 .accdb。 “无法识别的数据库格式”错误的主要内容,如果未能解决你的问题,请参考以下文章
MS Access .accdb 文件为其他打开,但给了我“无法识别的数据库格式”