帮助请我卡住了代码似乎没问题,但我得到了无法解决的异常
Imports System.Data.OleDb
Imports System.Media
Public Class login
Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
Dim x As Integer = 0
Dim con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Stock.mdb; Persist Security Info=True")
Dim com As New OleDbCommand("SELECT [ID] FROM [login] WHERE [unameField] = username AND [pwdField] = password", con)
Dim usrparm As New OleDbParameter("username", Me.UsernameTextBox.Text)
Dim pwdparm As New OleDbParameter("password", Me.PasswordTextBox.Text)
com.Parameters.Add(usrparm)
com.Parameters.Add(pwdparm)
com.Connection.Open()
在执行阅读器unhandeled异常
时出错 Dim reader As OleDbDataReader = com.ExecuteReader()
If reader.HasRows Then
adminpanel.Show()
Me.Close()
Else
MsgBox("Invalid credentials", MsgBoxStyle.OkOnly, "Error")
x = x + 1
End If
com.Connection.Close()
If x > 3 Then
MsgBox("You don't have access to the software please cotact administrator", MsgBoxStyle.OkOnly, "Uauthorised access")
Me.Close()
End If
End Sub
Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click
Me.Close()
End Sub
End Class
答案 0 :(得分:0)
如果我没记错,Access中OleDbParamaters
的语法在参数前需要@
:
Dim com As New OleDbCommand("SELECT [ID] FROM [login] WHERE [unameField] = @username AND [pwdField] = @password", con)
Dim usrparm As New OleDbParameter("@username", Me.UsernameTextBox.Text)
Dim pwdparm As New OleDbParameter("@password", Me.PasswordTextBox.Text)
答案 1 :(得分:0)
如果您的数据库名称和列名称与SELECT完全匹配,则此方法有效。这里的坏处是参数没有命名,因此将它们添加到集合的顺序非常重要。
Dim con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Stock.MDB; Persist Security Info=True") 'I use ACCDB
Dim com As New OleDbCommand("SELECT [ID] FROM [login] WHERE ( [unameField] = ? AND [pwdField] = ?); ", con)
com.Parameters.Clear()
Dim parm1 As OleDb.OleDbParameter = New OleDbParameter()
Dim parm2 As OleDb.OleDbParameter = New OleDbParameter()
com.Parameters.Add(parm1)
com.Parameters.Add(parm2)
parm1.Value = Me.UsernameTextBox.Text
parm2.Value = Me.PasswordTextBox.Text
com.Connection.Open()
... the rest of your code goes here
我建议您查阅有关最新版ADO.NET的资源,以便构建比此更好的代码。 try / catch的用户和从表单代码中隔离数据访问代码也非常重要。