从64位.NET程序连接到32位Access数据库

时间:2015-03-04 22:50:09

标签: .net vb.net com office-interop

我正在开发一个VB .NET接口,我刚刚意识到需要作为一个64位程序运行,因为我正在使用的一个COM引用(机器视觉软件)只能在64位工作-bit,因此编译为x86完全是完全的。我还将此GUI链接到一个简单的用户登录名,该登录名在我的程序启动时检查Access数据库的用户名和密码。

Office 2007是当前机器上安装的,当然是32位。这似乎会产生问题,因为我现在的64位程序无法再与数据库通信。我可以去购买一个64位的Office版本,但有什么方法吗?

我一直在尝试进行研究,但找不到任何与从64位接口访问32位数据库相关的内容,这些接口不建议仅编译为x86(我不能再这样做了)。我为“任何CPU”设置了程序。

以下是用户尝试登录时运行的代码。应用程序在执行conn.Open()时抛出异常。在为x86编译时,此代码以前工作得很好。

If UsernameTextBox.Text = "" Or PasswordTextBox.Text = "" Then
     MessageBox.Show("Please complete the required fields.", "Authentication Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
    Dim conn As New System.Data.OleDb.OleDbConnection()
    conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\LoginDatabase.accdb"

    Try

        Dim sql As String = "SELECT * FROM Login WHERE username='" & UsernameTextBox.Text & "' AND password = '" & PasswordTextBox.Text & "'"
        Dim sqlCom As New System.Data.OleDb.OleDbCommand(sql)

        sqlCom.Connection = conn
        conn.Open()

        Dim sqlRead As System.Data.OleDb.OleDbDataReader = sqlCom.ExecuteReader()

        If sqlRead.Read() Then

            Me.Hide()
            LoginCancel = False

        Else
            MessageBox.Show("Username and Password do not match.", "Authentication Failure", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            PasswordTextBox.Text = ""
            UsernameTextBox.Text = ""

            UsernameTextBox.Focus()
        End If

    Catch ex As Exception
        MessageBox.Show("Failed to connect to Database.", "Database Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try

End If

2 个答案:

答案 0 :(得分:3)

64位进程无法加载32位DLL。这是一个很难的规则。因此,您的程序无法加载Access DLL。

相反,您可以编写一个32位存根程序来加载Access DLL。然后,您的64位程序可以使用某种进程间通信与存根进行通信。

答案 1 :(得分:2)

卸载办公室并安装64位Access数据库引擎非常有效!现有代码无需更改,无需更新。感谢Icemanind的链接。

http://www.microsoft.com/en-us/download/details.aspx?id=13255