从C#连接到.accdb&引用;“无法识别的数据库格式”;埃罗克斯

从C#连接到.accdb&引用;“无法识别的数据库格式”;埃罗克斯,c#,ms-access,C#,Ms Access,我正在为客户端编写一个简短的实用程序,它将在access数据库上运行一系列查询,并将生成的数据表保存到excel文件中。我无法建立到access文件的初始连接 access查询是这样设置的:我连接到的文件(我们称之为Access1)存储了我需要运行的查询。查询的表位于单独的access文件(Access2)中。当我试图打开连接时,程序抛出异常 这是我的连接方法 private static OleDbConnection GetConnection() { var

我正在为客户端编写一个简短的实用程序,它将在access数据库上运行一系列查询,并将生成的数据表保存到excel文件中。我无法建立到access文件的初始连接

access查询是这样设置的:我连接到的文件(我们称之为Access1)存储了我需要运行的查询。查询的表位于单独的access文件(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;
    }
我已经遵循了其他一些答案的建议(特别是),但仍然收到了错误

我不完全相信问题出在代码本身,因为我能够在办公室大约一半的计算机上成功运行该程序。这让我觉得这是驱动程序或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位

另外,如果我将文件名更改为任何其他访问文件,则连接在我的计算机上打开时不会出现问题。当我这样做时,所有查询都无法运行,因为它是一个完全不同的文件,但是连接打开得很好

由于我可以成功连接到除所需文件之外的任何其他access文件,因此我是否需要更改one access文件中的某些设置以允许外部程序连接到它?我不这么认为,因为其他计算机也能做到这一点


或者是否有一些驱动程序或参考资料或其他我忽略的东西需要安装才能连接到MS Access?如果是这样,我如何才能连接到其他Access文件?

将目标平台更改为“AnyCPU”后,它对我有效,并且能够连接到.accdb数据库。我使用“x86”是为了在64位机器上调试时更改代码。谢谢DJ KRAZE

将目标平台更改为“AnyCPU”后,它对我有效,并且能够连接到.accdb数据库。我使用“x86”是为了在64位机器上调试时更改代码。谢谢DJ KRAZE

你可以试试

Provider=Microsoft.Jet.OLEDB.4.0

根据access文件。这对我很有效

你可以试试

Provider=Microsoft.Jet.OLEDB.4.0


根据访问文件。这对我有效

您在代码中分配
accessFilename`的位置..?您可能还需要执行/检查以下
将应用程序的目标平台更改为x86,而不是“任何cpu”。这样,您的应用程序将在64位系统上以WOW64模式运行,并将使用32位Jet提供程序。
检查此项以及旁白,您可以使用64位2010驱动程序安装2007 32位驱动程序。@DJ KRAZE今天重新开始工作,目标平台已设置为x86。但是,我决定切换到任何CPU只是为了看看。在这一改变之后,该程序在我尝试的任何计算机上都能完美运行。非常感谢您让我走上正轨。
您在代码中分配
accessFilename`的位置在哪里?您可能还需要执行/检查以下
将应用程序的目标平台更改为x86,而不是“任何cpu”。这样,您的应用程序将在64位系统上以WOW64模式运行,并将使用32位Jet提供程序。
检查此项以及旁白,您可以使用64位2010驱动程序安装2007 32位驱动程序。@DJ KRAZE今天重新开始工作,目标平台已设置为x86。但是,我决定切换到任何CPU只是为了看看。在这一改变之后,该程序在我尝试的任何计算机上都能完美运行。非常感谢你让我走上正轨。