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

标签 .net vb.net com office-interop

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

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

我一直在尝试进行研究,但找不到任何与从 64 位接口(interface)访问 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

最佳答案

64 位进程无法加载 32 位 DLL。这是一条硬性规定。所以你的程序无法加载Access DLL。

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

关于.net - 从 64 位 .NET 程序连接到 32 位 Access 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28866648/

相关文章:

c# - NHibernate 拦截器不工作

vb.net - 如何在 VB.NET Newtonsoft 中解析 Json 子项

vb.net - 判断 JPG 文件是否打开

c# - COM 互操作对象在一个项目中抛出 InvalidCastException,但在其他项目中没有

macos - OS/X 上的 iTunes COM 接口(interface)

c# - VS2010 中的 2.0 框架 .net 引用缺少 System.web.extensions 引用 dll?

c# - 进程无法访问文件,因为它被另一个进程使用

.net - 基于POCO的多层.NET框架

vb.net - 默认继承按钮文本

c# - 在 .NET Core 2.0 中使用 COM 对象