我正在创建一个登录表单供用户使用数据库登录。我想知道是否有一种方法可以让程序搜索整个表而不是某个项目。到目前为止,这是我的代码。
Dim UserInputtedUsername As String
Dim UserInputtedPassword As String
UserInputtedUsername = txtAdminUsername.Text
UserInputtedPassword = txtAdminPassword.Text
sqlrunnerQuery = "SELECT * FROM tblLogin"
daRunners = New OleDb.OleDbDataAdapter(sqlrunnerQuery, RunnerConnection)
daRunners.Fill(dsRunner, "Login")
If UserInputtedUsername = dsadminlogin.Tables("Login").Rows(0).Item(2) And UserInputtedPassword = dsadminlogin.Tables("Login").Rows(0).Item(3) Then
Form1.Show()
ElseIf MsgBox("You have entered incorrect details") Then
End If
End Sub
答案 0 :(得分:1)
相反,如果您的用户搜索(内存中)DataSet
,则首先搜索数据库。因此,您必须在sql查询中使用WHERE
(使用猜测的列名称):
sqlrunnerQuery = "SELECT * FROM tblLogin WHERE UserName=@UserName AND PassWord=@PassWord"
请注意,我已使用sql-parameters来阻止sql-injection。你以这种方式添加它们:
daRunners = New OleDb.OleDbDataAdapter(sqlrunnerQuery, RunnerConnection)
daRunners.SelectCommand.Parameters.AddWithValue("@UserName", txtAdminUsername.Text)
daRunners.SelectCommand.Parameters.AddWithValue("@PassWord", txtAdminPassword.Text)
如果没有这样的用户,现在表是空的。
If dsadminlogin.Tables("Login").Rows.Count = 0 Then
MsgBox("You have entered incorrect details")
End If
为了完整起见,您可以使用DataTable.Select
搜索完整的DataTable
。但我更喜欢LINQ-To-DataSet。这是一个简单的例子:
Dim grishamBooks = From bookRow in tblBooks
Where bookRow.Field(Of String)("Author") = "John Grisham"
Dim weHaveGrisham = grishamBooks.Any()