我正在尝试创建一个登录表单,并不断收到此错误:
Visual basic System.Data.OleDb.OleDbException:“没有为一个或多个必需参数赋值。”
我使用的是带有vb的access数据库,所有内容都拼写正确,但我一直收到这个错误?
Private Sub Btn_Login_Click(sender As Object, e As EventArgs) Handles Btn_Login.Click
If DbConnect() Then
Dim SQLCmd As New OleDbCommand
With SQLCmd
.Connection = cn
.CommandText = "Select * From Tbl_Staff Where (Username = @sUsername) and (Password = @sPassword)"
.Parameters.AddWithValue("@sUsername", Txt_Username.Text)
.Parameters.AddWithValue("@sPassword", Txt_Password.Text)
Dim rs As OleDbDataReader = .ExecuteReader()
If rs.Read Then
PublicFirstname = rs("Firstname")
PublicStaffID = rs("StaffID")
'PublicAccessLevel = rs("AccessLevel")
frmMainMenu.Show()
Else
MsgBox("Sorry, incorrect log in details entered")
End If
rs.Close()
编辑:
更改了我的代码,但仍然收到相同的错误:
If DbConnect() Then
Using SQLCmd As New OleDbCommand
With SQLCmd
.Connection = cn
.CommandText = "Select * From Tbl_Staff Where (Username = ?) and ([Password] = ?)"
.Parameters.Add("@sUsername", OleDbType.VarChar).Value = Txt_Username.Text
.Parameters.Add("@sPassword", OleDbType.VarChar).Value = Txt_Password.Text
Using rs As OleDbDataReader = .ExecuteReader()
If rs.Read Then
Else
MsgBox("Sorry, incorrect log in details entered")
End If
rs.Close()
End Using
End With
End Using
End If
发布于 2018-05-28 19:35:59
我在这里看到了两个问题。
CommandType
设置为Text
时,
OleDbCommand
不支持命名参数。它们被提供的顺序是substantial.
PASSWORD
是ms-access中的保留字。把它放在方括号里。
其他需要增强的东西。
Using
和OleDbCommand
使用明文存储密码。因此,您的代码应该如下所示:
Using SQLCmd As New OleDbCommand
With SQLCmd
.Connection = cn
.CommandText = "Select * From Tbl_Staff Where (Username = ?) and ([Password] = ?)"
.Parameters.Add("@sUsername", OleDbType.VarChar).Value = Txt_Username.Text
.Parameters.Add("@sPassword", OleDbType.VarChar).Value = Txt_Password.Text
Using rs As OleDbDataReader = .ExecuteReader()
If rs.Read Then
Else
MsgBox("Sorry, incorrect log in details entered")
End If
rs.Close()
End Using
End With
End Using
编辑:
由于列名不是Username
和Password
,而是sUsername
和sPassword
,因此必须更改CommandText
,如下所示:
.CommandText = "Select * From Tbl_Staff Where (sUsername = ?) and (sPassword = ?)"
https://stackoverflow.com/questions/50564802
复制相似问题