如何从文本框中清除以前的搜索?

how to clear the previous search from the textbox?

我是 vb.net 的新人。我有一个数据库,当点击搜索按钮并在文本框中显示该信息时,我是 运行 员工记录的搜索查询,但是当用户不在数据库中时,搜索输出显示上一次搜索的信息.如果用户不在记录中,文本框中的信息应显示为空白或显示 "No record found"。不确定我的代码有什么问题。

Try
    myConnection.Open()  
    Dim str As String
    str = "SELECT * FROM tblEmp WHERE (EmpID = '" & ADS.UserEmpID & "')"
    Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
    dr = cmd.ExecuteReader
    While dr.Read
        If dr.HasRows > 0 Then
            MessageBox.Show("user already in the system", "Warning", MessageBoxButtons.OK)
        ElseIf dr.HasRows = 0 Then
            MessageBox.Show("Not Onboarded", "Warning", MessageBoxButtons.OK)
        End If
        BGC1 = dr("PreStartChecks").ToString
        BGC2 = dr("EmpName").ToString
        myConnection.Close()
    End While
Catch ex As Exception
    MsgBox("Unable to Connect to BGC DB. You may not have access or DB not available." &
        ex.ToString)
End Try

您的 While 循环和 If 语句没有意义。首先,HasRowsBoolean 类型,因此测试它是否大于零是没有意义的。其次,Read returns False 如果没有行,那么您可以到达该 If 语句的唯一方法是如果至少有一行要读取所以测试 HasRows 当你已经知道有行也是无意义的。此处正确的选择是仅使用 If 语句并仅测试 Read

If dr.Read() Then
    'There is a row to read and it was just read, so you can now get the data from the reader.
Else
    'There is no row to read.
End If

如果您想在没有数据时清除控件,请在 Else 块中执行此操作。

关于何时以及如何使用 HasRowsRead 的 "rules" 非常简单和合乎逻辑:

  • 如果只关心查询结果集是否包含数据,而不关心数据是什么,用If语句测试HasRows即可。 HasRows 属性 是 Boolean 类型,因此无需将其与任何内容进行比较。已经是 TrueFalse.
  • 如果结果集中只能有零行或一行,只需使用If 语句调用Read 并测试结果。同样,它是 Boolean 类型,所以没有必要将它与任何东西进行比较。如果它 returns True 那么您可以访问您刚刚读取的行的数据。
  • 如果可以有多行并且你不想在没有行的情况下做任何特殊的事情,那么只需使用 WhileDo While 循环来调用 Read 和访问刚刚在循环中读取的行。
  • 如果可以有多个行,并且您确实想在没有行的情况下做一些特殊的事情,请使用 If 语句来测试 HasRows,然后使用 WhileDo WhileIf 块内循环调用 Read。您将处理 Else 块中没有行的情况。

假设 txtBGC1txtBGC2 是文本框,你可以这样做,假设查询最多 return 一名员工

...
If dr.Read Then ' There is an employee
    txtBGC1.Text = dr("PreStartChecks").ToString
    txtBGC2.Text = dr("EmpName").ToString
Else ' There is no employee
    txtBGC1.Text = ""
    txtBGC2.Text = "No record found"
End If
myConnection.Close()