Sql server 验证用户名和密码列中的登录数据
我编写了以下函数来验证用户的登录数据,但到目前为止,它没有正常工作,我确信它有问题:Sql server 验证用户名和密码列中的登录数据,sql-server,vb.net,login,Sql Server,Vb.net,Login,我编写了以下函数来验证用户的登录数据,但到目前为止,它没有正常工作,我确信它有问题: Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles button2.Click If loginpasswordtx.Text.Length > 1 And loginpasswordtx.Text.Length > 1 And
Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles button2.Click
If loginpasswordtx.Text.Length > 1 And loginpasswordtx.Text.Length > 1 And My.Settings.SQLConnectionString.Length > 5 Then
Try
Dim cnn As New SqlConnection(My.Settings.SQLConnectionString)
Dim cmd = New SqlCommand("SELECT AppUser,AppUserPass FROM OrderAppUsers WHERE AppUser=@AppUser AND AppUserPass=@AppUserPass", cnn)
cmd.Parameters.Add(New SqlParameter("@AppUser", createuserAppUser.Text))
cmd.Parameters.Add(New SqlParameter("@AppUserPass", MD5StringHash(loginpasswordtx.Text)))
cnn.Open()
Dim obj As Object = cmd.ExecuteScalar()
If obj = Nothing Then
MsgBox("Faild to Log in, check your log in info")
cnn.Close()
Return
End If
cnn.Close()
Catch ex As SqlException
MsgBox(ex.Message)
Return
End Try
MsgBox("Logged in Successfully")
End If
End Sub
我得到的只是一个null obj
,即使表中存在user和pass
以下代码用于添加新用户
Try
Dim cnnstring As String = String.Format("Server={0};Database={1};Trusted_Connection=True;", createuserServerTx.Text, createuserDatabaseTx.Text)
Dim cnn As New SqlConnection(cnnstring)
Dim cmd As New SqlCommand("INSERT INTO OrderAppUsers VALUES (@AppUser, @AppUserPass)", cnn)
cmd.Parameters.Add(New SqlParameter("@AppUser", createuserAppUser.Text))
cmd.Parameters.Add(New SqlParameter("@AppUserPass", MD5StringHash(createuserpassword.Text)))
cnn.Open()
cmd.ExecuteNonQuery()
cnn.Close()
MsgBox("User Crated Successfully")
LayoutControl1.Visibility = Windows.Visibility.Collapsed
My.Settings.SQLConnectionString = cnnstring
My.Settings.Save()
Catch ex As SqlException
MsgBox(ex.Message)
End Try
以及生成自定义哈希的函数
Private Function MD5StringHash(ByVal strString As String) As String
Dim MD5 As New MD5CryptoServiceProvider
Dim Data As Byte()
Dim Result As Byte()
Dim R As String = ""
Dim Temp As String = ""
Data = Encoding.ASCII.GetBytes(strString)
Result = MD5.ComputeHash(Data)
For i As Integer = 0 To Result.Length - 1
Temp = Hex(3 * Result(i) + 1)
If Len(Temp) = 1 Then Temp = "0" & Temp
R += Temp
Next
Return R
End Function
添加参数时请尝试以下操作
cmd.Parameters.AddWithValue("@AppUser", createuserAppUser.Text)
cmd.Parameters.AddWithValue("@AppUserPass", MD5StringHash(loginpasswordtx.Text))
或者只是坚持你所做的,但与你的有所不同
cmd.Parameters.Add("@AppUser", SqlDbType.VarChar)
cmd.Parameters("@AppUser").Value = createuserAppUser.Text
cmd.Parameters.Add("@AppUserPass", SqlDbType.VarChar)
cmd.Parameters("@AppUserPass").Value = MD5StringHash(loginpasswordtx.Text)
顺便说一下,当使用ExecuteScalar()
时,它只返回单个值。因此,您的查询可以写成
SELECT COUNT(*)
FROM OrderAppUsers
WHERE AppUser=@AppUser AND AppUserPass=@AppUserPass
您可以使用int
变量来存储其值
Dim obj As int = Cint(cmd.ExecuteScalar())
因此,可能的值是0
或返回的记录总数
If obj = 0 Then
MsgBox("Faild to Log in, check your log in info")
'' other codes
End If
通过折射代码,使用Using-Statement
Using cnn As New SqlConnection(My.Settings.SQLConnectionString)
Using cmd = New SqlCommand("SELECT COUNT(*) FROM OrderAppUsers WHERE AppUser=@AppUser AND AppUserPass=@AppUserPass", cnn)
cmd.Parameters.AddWithValue("@AppUser", createuserAppUser.Text)
cmd.Parameters.AddWithValue("@AppUserPass", MD5StringHash(loginpasswordtx.Text))
cmd.CommandType = CommandType.Text
Try
cnn.Open()
Dim obj As int = Cint(cmd.ExecuteScalar())
If obj = 0 Then
MsgBox("Faild to Log in, check your log in info")
Else
MsgBox("Logged in Successfully")
End If
Catch(ex As SqlException)
MsgBox(ex.Message.ToString())
End Try
End Using
End Using
添加参数时请尝试以下操作
cmd.Parameters.AddWithValue("@AppUser", createuserAppUser.Text)
cmd.Parameters.AddWithValue("@AppUserPass", MD5StringHash(loginpasswordtx.Text))
或者只是坚持你所做的,但与你的有所不同
cmd.Parameters.Add("@AppUser", SqlDbType.VarChar)
cmd.Parameters("@AppUser").Value = createuserAppUser.Text
cmd.Parameters.Add("@AppUserPass", SqlDbType.VarChar)
cmd.Parameters("@AppUserPass").Value = MD5StringHash(loginpasswordtx.Text)
顺便说一下,当使用ExecuteScalar()
时,它只返回单个值。因此,您的查询可以写成
SELECT COUNT(*)
FROM OrderAppUsers
WHERE AppUser=@AppUser AND AppUserPass=@AppUserPass
您可以使用int
变量来存储其值
Dim obj As int = Cint(cmd.ExecuteScalar())
因此,可能的值是0
或返回的记录总数
If obj = 0 Then
MsgBox("Faild to Log in, check your log in info")
'' other codes
End If
通过折射代码,使用Using-Statement
Using cnn As New SqlConnection(My.Settings.SQLConnectionString)
Using cmd = New SqlCommand("SELECT COUNT(*) FROM OrderAppUsers WHERE AppUser=@AppUser AND AppUserPass=@AppUserPass", cnn)
cmd.Parameters.AddWithValue("@AppUser", createuserAppUser.Text)
cmd.Parameters.AddWithValue("@AppUserPass", MD5StringHash(loginpasswordtx.Text))
cmd.CommandType = CommandType.Text
Try
cnn.Open()
Dim obj As int = Cint(cmd.ExecuteScalar())
If obj = 0 Then
MsgBox("Faild to Log in, check your log in info")
Else
MsgBox("Logged in Successfully")
End If
Catch(ex As SqlException)
MsgBox(ex.Message.ToString())
End Try
End Using
End Using
我在我的本地系统中检查了你的代码,它工作正常。我的意思是,我能够验证它的返回为真,我的分析发现它的返回为假,只有当我在加密之前在密码文本上添加一个空格时,你可以签入数据库值是将空格添加到密码值中还是可以发布你的加密代码本地系统,它工作正常我的意思是我能够验证它的返回真我的分析,发现它的返回假只有当我在加密前在密码文本上添加一个空格时你能签入数据库值是在密码值中添加空格还是你能发布你的加密代码仍然是相同的问题,我不知道出了什么问题,有趣的是,只有当我创建一个新用户并尝试登录时,它才起作用。在我关闭应用程序并尝试使用它显示为“登录失败,请检查您的登录信息”的同一用户再次登录后,我在中添加了如何将用户添加到数据库的代码question@user1570048你检查过数据库了吗?插入成功了吗?@user1570048实际上我不知道你添加的参数是否有效。它应该是
cmd.Parameters.Add(“@AppUser”,SqlDbType.VarChar)
然后添加valuecmd.Parameters(“@AppUser”).value=createuserAppUser.Text
或者你可以尝试使用cmd.Parameters.AddWithValue(@AppUser”,createuserAppUser.Text)
同样的东西,这真的很烦人,我可以看到用户添加到数据库这不是问题,一定是有登录功能的东西!将数据加载到datatable和检查工作,使用读取器也可以工作,但是为什么它使用参数不工作真的很奇怪!仍然是同样的问题,我不知道怎么回事,有趣的是,只有当我创建了一个新用户并尝试登录时,它才起作用,在我关闭应用程序并尝试使用它所说的“登录失败,请检查您的登录信息”的同一用户再次登录后,我在中添加了如何将用户添加到数据库的代码question@user1570048你检查过数据库了吗?插入成功了吗?@user1570048实际上我不知道你添加的参数是否有效。它应该是cmd.Parameters.Add(“@AppUser”,SqlDbType.VarChar)
然后添加valuecmd.Parameters(“@AppUser”).value=createuserAppUser.Text
或者你可以尝试使用cmd.Parameters.AddWithValue(@AppUser”,createuserAppUser.Text)
同样的东西,这真的很烦人,我可以看到用户添加到数据库这不是问题,一定是有登录功能的东西!将数据加载到datatable和检查工作,使用读取器也可以工作,但是为什么它使用参数不工作真的很奇怪!很好,我添加了一个函数来生成自定义密码哈希到问题中,你能检查它是否与此函数一起工作吗?很好,我添加了一个函数来生成自定义密码哈希到问题中,你能检查它是否与此函数一起工作吗?