【发布时间】:2015-05-06 03:51:53
【问题描述】:
我正在开发一个 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
【问题讨论】:
-
据我所知,您需要 Office 64 位。 (或者根本没有办公室并安装 64 位的 ACE 驱动程序)但是我有很多疑问,该代码以前是否有效。密码是保留关键字。您应该在该查询中收到语法错误
-
只需转到here, to Microsoft's Website 并下载 64 位版本的 Access 数据库引擎。
-
谢谢大家,我会尝试卸载 Office 并安装 Access 数据库引擎。在购买之前值得一试,因为 Office 并不需要安装在这台机器上。
标签: .net vb.net com office-interop