我正在创建一个应用程序,我在第一个障碍时遇到了困难。我创建了一个由用户名和密码文本框组成的登录表单,其中的条目必须与数据库中的记录匹配才能继续。
应用程序在Visual Studio Express 2013中创建,数据库在Access 2013中创建。 当我尝试编译时,我收到以下错误消息。
System.Data.dll 中出现'System.Data.OleDb.OleDbException'类型的未处理异常。
其他信息:FROM子句中的语法错误。
页面的代码在
下面Imports System
Imports System.Data
Imports System.Data.OleDb
Imports System.Data.SqlClient
Public Class frm_1_Login
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btn_Login.Click
' Check if username or password is empty
If txt_Username.Text = "" Or txt_Password.Text = "" Then
lbl_LoginWarning.Visible = True
Else
'Connect To Database
Dim conn As New System.Data.OleDb.OleDbConnection()
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Kevin\Desktop\Non Conformance\NonConformance.accdb"
Dim sql As String = "SELECT * FROM User WHERE UserName ='" & txt_Username.Text & "' AND UserPassword = '" & txt_Password.Text & "'"
Dim sqlCom As New System.Data.OleDb.OleDbCommand(sql)
'open database connection
sqlCom.Connection = conn
conn.Open()
' Try
Dim sqlRead As System.Data.OleDb.OleDbDataReader = sqlCom.ExecuteReader()
If sqlRead.Read() Then
frm_2_MainMenu.Show()
Me.Hide()
Else
'if user enters wrong username and password combination display error message
lbl_LoginWarning.Visible = True
'clear all fields
txt_Password.Text = ""
txt_Username.Text = ""
'Focus in username field
txt_Username.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
End Sub
End Class
当它向我发送错误消息时,它突然显示这行代码
Dim sqlRead As System.Data.OleDb.OleDbDataReader = sqlCom.ExecuteReader()
我已将查询复制到访问权限中,并且工作正常。
我不确定是什么导致了这一点,我们非常感谢任何帮助!
感谢阅读。
答案 0 :(得分:2)
User
是Access中的reserved word
:Reserverd words in access。
您必须使用[]
封装保留字以使其工作。
您的查询应该是
SELECT * FROM [User] WHERE UserName ='" & txt_Username.Text & "' AND UserPassword = '" & txt_Password.Text & "'
请仔细阅读查询中参数的使用,以后会为您节省很多问题。 Here是关于OleDb(Access)
的查询和参数的一些方便信息