我有一个Microsoft Access数据库(.mdb)。有一个名为" tblLogin"的表。该表如下所示:
ID | Username | Password | Access Level
1 | admin | admin | 3
2 | staff | staff | 2
3 | user | user | 1
我实现了某种登录功能,代码如下:
Imports System.Data.OleDb
.....
username = txtUsername.text
password = txtPassword.text
Dim connection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=server.mdb;")
Dim command As New OleDbCommand("SELECT [ID] FROM [tblLogin] WHERE [UsernameField] = username AND [PasswordField] = password", connection)
Dim usernameParam As New OleDbParameter("username", username)
Dim passwordParam As New OleDbParameter("password", password)
command.Parameters.Add(usernameParam)
command.Parameters.Add(passwordParam)
If reader.HasRows Then
MessageBox.Show("you have authenticated successfully")
'' update
Dim level = reader("Access Level").ToString()
MsgBox(level)
'' The textbox returns the word "Access Level", not the value of 0,1,2 etc.
command.Connection.Close()
command.Connection.Dispose()
End If
如果提供的用户名和密码与数据库中的用户名和密码匹配,则认为该用户已登录。问题是,我想获得"访问级别"当用户登录时,我对此非常感兴趣。
如何获取登录用户的访问级别值?我需要使用reader.GetValue等吗?
谢谢!
更新
Dim command As New OleDbCommand("SELECT [ID] FROM [tblLogin] WHERE [UsernameField] = username AND [PasswordField] = password", connection)
更改为
Dim command As New OleDbCommand("SELECT * FROM [tblLogin] WHERE [UsernameField] = username AND [PasswordField] = password", connection)
罪魁祸首实际上是db命令 - , - 我现在必须睡不够。
答案 0 :(得分:1)
您只需在选择字段列表中添加该字段即可 顺便说一句,OleDb的参数占位符通常是一个问号。 OleDb无法通过名称识别参数,只能通过占位符在命令文本
中的位置来识别using connection = New OleDbConnection("............")
using command = New OleDbCommand("SELECT [ID], [Access Level] " & _
"FROM [tblLogin] WHERE [Username] = ? AND " & _
"[Password] = ?", connection)
Dim usernameParam As New OleDbParameter("@p1", username)
Dim passwordParam As New OleDbParameter("@p2", password)
command.Parameters.Add(usernameParam)
command.Parameters.Add(passwordParam)
using (OleDbDataReader reader = command.ExecuteReader())
if reader.Read() Then
MessageBox.Show("you have authenticated successfully")
' Now you need to read that field and store in a variable or
' in some kind of user interface object....
Dim level = reader("Access Level").ToString()
End If
End Using
End Using
End Using