[英]Comparing String Variable to SQL table VB.Net
因此,到現在為止,我大概對數據庫編程和一般的SQL經驗都很少,所以如果我所說的超出了我的理解范圍,我深表歉意。 我一直在嘗試創建一個登錄表單來訪問我的數據庫表,並比較用戶已寫入表本身的內容。 在不懈地搜索互聯網之后,我似乎無法理解為什么我編寫的代碼無法讀取表格。 這是一個例子,也許有人可以幫助我了解我的問題?
Public Function CompareDbValues(Compare_1 As String)
Using connection As New SqlConnection("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\User\OneDrive\Software\WindowsApplication1\WindowsApplication1\Database1.mdf;Integrated Security=True")
connection.Open()
Dim sSQL As String = "SELECT UserName, Password FROM [Table] WHERE UserName = 'Me.UserName.Text' AND Password = 'Me.Password.Text'"
Using Command As New SqlCommand(sSQL, connection)
Dim Reader As SqlDataReader
Reader = Command.ExecuteReader()
If Reader.HasRows Then
Do While Reader.Read()
If Compare_1 = Reader("UserName").ToString Then
Return True
Else
Return False
End If
Loop
End If
End Using
connection.Close()
End Using
Return False
End Function
我的問題似乎是我的代碼到達“ If Reader.HasRows Then”行時。 再次感謝您的關注。
首先,將您的sql像這樣發送到數據庫:
SELECT UserName, Password
FROM [Table]
WHERE UserName = 'Me.UserName.Text' AND Password = 'Me.Password.Text'
由於我沒有假設用戶將選擇Me.UserName.Text
作為用戶名和Me.Password.Text
作為密碼,我想沒有人會通過此登錄。
其次,如果您想通過將文本框文本連接到sql字符串來解決此問題,請再考慮一下。 這是主要的安全隱患。 了解有關Sql注入攻擊的信息。
正確的方法是使用參數化查詢或存儲過程。
Dim sSQL As String = "SELECT 1 " & _
"FROM [Table] " & _
"WHERE UserName = @UserName " & _
"AND Password = @PassWord " & _
"AND @UserName = @Compare"
Using Command As New SqlCommand(sSQL, connection)
Command.Parameters.Add("@UserName", SqlDbType.VarChar).Value = Me.UserName.Text
Command.Parameters.Add("@Password", SqlDbType.VarChar).Value = Me.Password.Text
Command.Parameters.Add("@Compare", SqlDbType.VarChar).Value = Compare1
Dim Reader As SqlDataReader = Command.ExecuteReader()
Return Reader.HasRows
End Using
請注意,where子句已經為您比較了值,因此您所要做的只是查看查詢是否返回了任何行。
這是您的問題在這里:
Dim sSQL As String = "SELECT UserName, Password FROM [Table] WHERE UserName = 'Me.UserName.Text' AND Password = 'Me.Password.Text'"
您要告訴數據庫將數據庫中的值與文字文本“ Me.UserName.Text”和“ Me.Password.Text”進行比較。 您實際上從哪里都看不到用戶輸入的文本並將其發送到數據庫。 請注意,在您發布的代碼中,這些部分是如何變成紅色的? 這意味着它們是文字String
一部分。 如果您使用變量,那么它們不會是紅色的。 這實際上是您想要做的:
Dim sSQL As String = "SELECT UserName, Password FROM [Table] WHERE UserName = '" & Me.UserName.Text & "' AND Password = '" & Me.Password.Text & "'"
現在使用變量並從變量中獲取數據,並將該數據連接到文字String
。
雖然那仍然不是很好的代碼。 我不在這里討論它,因為它超出了您原始問題的范圍,但是您應該學習如何使用參數化查詢,這可以保護您免受各種問題的影響,最重要的是可以防止SQL注入攻擊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.