与Access数据库的C#连接失败。研究表明,64位项目支持32位访问,但解决方案没有';行不通
刚刚开始我的第一个关于VisualStuido 2019的C#项目。在Windows窗体上,我用Access Ace.Oledb.12连接字符串编写了一个小型连接程序。它不起作用与Access数据库的C#连接失败。研究表明,64位项目支持32位访问,但解决方案没有';行不通,c#,visual-studio,ms-access,C#,Visual Studio,Ms Access,刚刚开始我的第一个关于VisualStuido 2019的C#项目。在Windows窗体上,我用Access Ace.Oledb.12连接字符串编写了一个小型连接程序。它不起作用 conn_string = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = c:\\DBase\\customer.accdb; Persist Security Info=False;"; oledbconnection conn = null; conn = ne
conn_string = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = c:\\DBase\\customer.accdb; Persist Security Info=False;";
oledbconnection conn = null;
conn = new oledbconnection(conn_string);
conn.open();
代码是基本的,因为我仍然是在这个环境中工作的新手。
唉,它没有起作用
我收到了错误信息
“您试图打开的数据库需要更新版本的Microsoft Access”
这里是Access 365
我在做研究,我的odbc访问驱动程序似乎只有32位
我添加了32位的活动解决方案配置x86,但它仍然不起作用
有没有办法解决这个问题
这似乎是一个荒谬的问题,尤其是对新办公产品的更新
谢谢
DamnGroundHog在App.config文件中定义连接字符串
<configuration>
<connectionStrings>
<add name="DBCS" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Dbase\Customer.accdb"
providerName="System.Data.OleDb" />
</connectionStrings>
</configuration>
好的,有几个问题
您收到某种类型的格式错误是“奇怪的”。如果您的连接字符串正在使用JET,那么这将是有意义的。但是,由于是accDB格式,因此错误表明应用程序中嵌入了一些2010特性。这通常意味着2010年引入的新表触发器和存储过程可能是这里的问题(2007无法打开这些文件)
但是,请记住,在Access 2013年前后,当然是2016年,简单的Access安装不会将ACE数据引擎公开给外部使用(比如从.net)
喷气式发动机从未被要求安装,因为它包含在windows安装中,并且从windows 98天起就一直如此。因此,JET(仅mdb格式)从未要求您安装Access(完整或运行时),您甚至从未要求安装JET
然而,ACE数据引擎是另一回事。正如我指出的,自Access 2013年前后,安装Access(完整或运行时)不会安装您可以使用的ACE的“公开”和注册副本(例如从.net)。因此,您现在几乎“总是”必须安装ACE数据引擎。这一要求现在已经存在,并且在大约20年的使用中发生了变化。因此,现在安装Access不再提供第三方代码中可用的“ACE”数据引擎版本,也不再提供像.net这样的外部程序使用
因此,您必须在计算机上安装ACE
您可以在此处找到指向数据库引擎的链接:
从上面看,您希望安装适当的位大小。因此,ACE x32位或ACE x64位
如果您运行的是x86版本的office,那么将.net项目强制为x86是一个好主意
因此,就目前而言,仅安装Access将允许Access使用其ACE数据库引擎的副本,但是,此类安装“现在”不会安装ACE数据库引擎的公开副本,以便通过.net等外部代码系统使用
因此,您可以尝试一下上面的下载+安装
我还有一个非常小的.net程序,一个是x32,另一个是x64。您可以在此处找到链接:
解压缩这两个示例。您可以启动x32版本,并浏览到accDB文件–如果可以,该实用程序将打开并显示数据
看起来像这样:
您可以运行与x64位相同的示例,看看是否有效。如果两者都不起作用,则您没有安装可用版本的ACE。在VS 2019和O365中对我起作用的是将Access数据库复制到具有.mdb扩展名的2000版本,然后修改连接字符串,如下所示 更改:
connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\ProductionData.accdb;Persist Security Info=True"
致:
不幸的是,在实现您请求的更改后,问题仍然存在,我收到了相同的错误消息。@DamnGroundHog Check out。因此,我进入了访问选项,通常默认的文件格式是Access2007-2016。此外,在当前数据库设置中,未单击“支持链接导入表的大数(BigInt)”选项。我的桌子上只选了一个号码。我认为这是因为创建数据库的时间早于最新的Office 365。还有其他方法可以检查BigInt吗?哇。谢谢你的帮助,我感谢你的帮助。事实上,我找到了另一个可行的方法,但我也会测试一下。我所做的是进入我的ODBC设置,对于Access,我选择创建,它允许我选择ACE 12.0作为驱动程序/引擎等。然后我将我的表复制到新的数据库中,它工作了。不幸的是,我被催促寻求解决办法。这是我下个星期度假回来后一定要尝试的东西。我找到了官方文档,其中描述了为什么会出现错误,并给出了相应的解决方案。
connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\ProductionData.accdb;Persist Security Info=True"
connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\ProductionData.mdb;Persist Security Info=True"