提问人:MGC 提问时间:10/2/2023 最后编辑:jmcilhinneyMGC 更新时间:10/2/2023 访问量:72
如何在 sql 中比较两个字符串值 Absolute?
How do I compare two string value Absolutely in sql?
问:
我试图弄清楚如何比较两个字符串值以获得绝对匹配。即“abc”<>“abc”。
“abc”在 SQL(Usr) 中的一行中,“abc”是变量值。
当我运行这个 - “从UserTable中选择Count(*),其中UserName = '” &Usr &“'” &“ and Password = '” & Pwd & “'” - 它告诉我这两个值是相同的。
我不知道如何获得绝对比较??
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim Usr As String, Pwd As String
Usr = TextBox1.Text.Trim
Pwd = TextBox2.Text.Trim
Dim i As Integer
user_stmt = "Select Count(*) from UserTable where UserName = '" & Usr & "'" & " and Password = '" & Pwd & "'"
User_Cmd = New SqlCommand(user_stmt, con)
con.Open()
i = User_Cmd.ExecuteScalar()
Stop
If i = 1 Then
MsgBox("Found")
Else
MsgBox("Exit")
End If
End Sub
谢谢
话筒
答:
1赞
AlgorithmAlchemist
10/2/2023
#1
在代码中,有几件非常重要的事情需要考虑和纠正:
SQL注入风险:
您的代码容易受到 SQL 注入攻击。切勿将字符串值直接连接到 SQL 语句中。请改用参数化查询。
SQL 中的区分大小写:
如果要区分大小写比较,则需要通过将 COLLATE Latin1_General_BIN附加到比较中来强制进行二进制比较。
存储密码:
不要在数据库中存储纯文本密码。始终存储密码的加盐哈希并比较哈希。纯文本密码存储存在严重的安全风险。
以下是您的问题的潜在解决方案:(没有使用盐进行哈希处理,但您可以轻松找到适合您的函数)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim Usr As String, Pwd As String
Usr = TextBox1.Text.Trim
Pwd = TextBox2.Text.Trim
Dim i As Integer
user_stmt = "SELECT Count(*) FROM UserTable WHERE UserName COLLATE Latin1_General_CS_AS = @UserName AND Password COLLATE Latin1_General_CS_AS = @Password"
User_Cmd = New SqlCommand(user_stmt, con)
User_Cmd.Parameters.AddWithValue("@UserName", Usr)
User_Cmd.Parameters.AddWithValue("@Password", Pwd)
con.Open()
i = User_Cmd.ExecuteScalar()
con.Close()
If i = 1 Then
MsgBox("Found")
Else
MsgBox("Exit")
End If
End Sub
评论
0赞
MGC
10/2/2023
感谢您的帮助;非常感谢。
0赞
jarlh
10/2/2023
请注意,Latin1_General_BIN是特定于产品的排序规则 - 对于未指定的 dbms...
评论