从C#连接到.accdb。 “无法识别的数据库格式”错误

时间:2013-03-18 20:45:57

标签: c# ms-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 2010 64位和64位Windows 7.据我所知,这是唯一一个已安装在此的Windows / Office版本机。

我的主管的机器(将运行它)运行完全相同的办公室和窗口版本。另外,我没有在他的机器上安装任何额外的东西来运行程序。他的机器已经在这个区域进行了几次,并且在某些时候可能拥有2007年的早期版本或2010年的32位版本。他记不起来了。

其成功运行的其他office / windows版本是   -Windows 7 64位/ Office 2007 32位   -Windows XP / Office 2007 32位。

要添加另一个皱纹,如果我将文件名更改为任何其他访问文件,则在我的机器上打开连接时没有问题。当我这样做时,查询都无法运行,因为它是一个完全不同的文件,但连接打开就好了。

由于我可以成功连接到任何其他访问文件但我需要的那个,是否需要更改一个访问文件中的一些设置以允许外部程序连接到它?我想不会因为其他计算机可以做到这一点。

或者是否有一些驱动程序或引用或者我正在忽略并且需要安装以便连接到MS Access的任何内容?如果是这样,我如何能够连接到其他Access文件?

2 个答案:

答案 0 :(得分:4)

将目标平台更改为“AnyCPU”后,它对我有用,并且能够连接到.accdb数据库。我正在使用“x86”,以便在64位计算机上调试期间更改代码。谢谢DJ KRAZE!

答案 1 :(得分:0)

你可以尝试

asyncTask

Provider=Microsoft.Jet.OLEDB.4.0

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