在写用户登录发现直接用Select语句,同时搜索用户密码时候,发现密码的大小写不是区分的,例如密码是a,输入a或者A,都可以登陆成功。
解决方法:先根据用户名搜索密码,把密码赋值给一个变量,再比对。
'=============根据ComboBox1.Text中的选项返回给ComboBox2.Text用户的默认语言===============
Dim myconnection As New OleDbConnection(PubDB) '连接数据库
Dim mycommand As OleDbCommand
'=============数据库的操作命令========================
Dim s As String = "select 密码 from userlist where 用户名 = '" & ComboBox1.Text & "'"
Dim i As String
myconnection.Open()
mycommand = New OleDbCommand(s, myconnection)
Dim rs As OleDbDataAdapter = New OleDb.OleDbDataAdapter(mycommand)
Dim sdate As New DataTable
rs.Fill(sdate)
i = sdate.Rows(0).Item(0)
myconnection.Close()
If i = Trim(TextBox1.Text) Or TextBox1.Text = PubKey Then
MsgBox("登录成功!", 0 + 48, "提示")
TextBox1.Text = "" '====================================初始化密码
Me.Close()
Me.Dispose()
Else
MsgBox("用户名不存在或者密码错误!", 0 + 48, "提示")
TextBox1.Text = "" '=====================================初始化密码
TextBox1.Focus()
End If
创建用户名的时候,也要注意:当创建abc,Abc和ABC三个用户名的时候,当修改密码,或者其他属性的,会一起过把所有的用户的相同属性改为同一样。
解决方法:调用Lcase函数或 Ucase函数 屏蔽大小写一样的用户名。
'=============根据ComboBox1.Text中的选项返回给ComboBox2.Text用户的默认语言===============
Dim myconnection As New OleDbConnection(PubDB)
Dim mycommand As OleDbCommand
'=============数据库的操作命令========================指令需要改为搜索用户名的所有值
Dim s As String = "select 用户名 from userlist"
'===============操作数据库=======================
myconnection.Open()
mycommand = New OleDbCommand(s, myconnection)
Dim rs As OleDbDataAdapter = New OleDb.OleDbDataAdapter(mycommand)
Dim sdate As New DataTable
rs.Fill(sdate)
Dim i As Integer
For i = 0 To sdate.Rows.Count - 1
If LCase(Trim(TextBox1.Text)) = LCase(Trim(sdate.Rows(i).Item(0))) Then
MsgBox("已存在用户:" & TextBox1.Text & "", 0 + 48, "提示")
TextBox1.Text = ""
TextBox2.Text = ""
TextBox1.Focus()
End If
为了防止用户输入密码的时候按多一个空格提示输入错误,因而调用Trim()函数自动把用户多输入的空格删除。因而引发一个问题就是如果创建多个空格的用户名或者空格密码的时候,会出现,无论输入一个或者多个空格都能成功登入系统。
解决方法:禁止空格的录入产生。
If e.KeyChar = ChrW(32) Then
e.Handled = True
MsgBox("密码不能含有空格!", 0 + 48, "提示")
TextBox2.Clear()
TextBox2.Focus()
End If