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