如何清除文本框中的上一个搜索?

时间:2019-01-16 22:10:24

标签: vb.net vb.net-2010 c#-to-vb.net

我是vb.net的新手。我有一个数据库,并且单击搜索按钮并在文本框中显示该信息时,我正在运行员工记录的搜索查询,但是当用户不在数据库中时,搜索输出将显示上一次搜索的信息。如果用户不在记录中,则文本框中的信息应显示为空白或显示“未找到记录”。不知道我的代码有什么问题。

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

2 个答案:

答案 0 :(得分:0)

您的While循环和If语句没有任何意义。首先,HasRows的类型为Boolean,因此测试它是否大于零是没有意义的。其次,如果没有行,Read将返回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的“规则”非常简单且合乎逻辑:

  • 如果您关心的只是查询结果集是否包含数据,但您不在乎该数据是什么,只需使用If语句来测试HasRowsHasRows属性的类型为Boolean,因此无需将其与任何内容进行比较。已经是TrueFalse
  • 如果结果集中只能有零行或一行,则只需使用If语句来调用Read并测试结果。同样,它的类型为Boolean,因此无需将其与任何事物进行比较。如果返回True,则可以访问刚刚读取的行的数据。
  • 如果可以有多行,并且如果没有行,您不想做任何特殊的事情,那么只需使用WhileDo While循环来调用Read并访问循环内刚刚读取的行。
  • 如果可以有多行,并且您确实想在没有行的情况下做一些特殊的事情,请使用If语句来测试HasRows,然后使用While或{{1 }}在Do While块内循环以调用If。您将处理Read块中没有行的情况。

答案 1 :(得分:0)

假设txtBGC1txtBGC2是TextBoxes,假设查询最多返回一位员工,您可以执行类似的操作

...
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()