我正在开发一个 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/