引用整个数据集而不是单个Cell

时间:2015-01-07 15:39:48

标签: vb.net

我正在创建一个登录表单供用户使用数据库登录。我想知道是否有一种方法可以让程序搜索整个表而不是某个项目。到目前为止,这是我的代码。

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

1 个答案:

答案 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()