如何从文本框中清除以前的搜索?
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
语句没有意义。首先,HasRows
是 Boolean
类型,因此测试它是否大于零是没有意义的。其次,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
块中执行此操作。
关于何时以及如何使用 HasRows
和 Read
的 "rules" 非常简单和合乎逻辑:
- 如果只关心查询结果集是否包含数据,而不关心数据是什么,用
If
语句测试HasRows
即可。 HasRows
属性 是 Boolean
类型,因此无需将其与任何内容进行比较。已经是 True
或 False
.
- 如果结果集中只能有零行或一行,只需使用
If
语句调用Read
并测试结果。同样,它是 Boolean
类型,所以没有必要将它与任何东西进行比较。如果它 returns True
那么您可以访问您刚刚读取的行的数据。
- 如果可以有多行并且你不想在没有行的情况下做任何特殊的事情,那么只需使用
While
或 Do While
循环来调用 Read
和访问刚刚在循环中读取的行。
- 如果可以有多个行,并且您确实想在没有行的情况下做一些特殊的事情,请使用
If
语句来测试 HasRows
,然后使用 While
或 Do While
在 If
块内循环调用 Read
。您将处理 Else
块中没有行的情况。
假设 txtBGC1
和 txtBGC2
是文本框,你可以这样做,假设查询最多 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()
我是 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
语句没有意义。首先,HasRows
是 Boolean
类型,因此测试它是否大于零是没有意义的。其次,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
块中执行此操作。
关于何时以及如何使用 HasRows
和 Read
的 "rules" 非常简单和合乎逻辑:
- 如果只关心查询结果集是否包含数据,而不关心数据是什么,用
If
语句测试HasRows
即可。HasRows
属性 是Boolean
类型,因此无需将其与任何内容进行比较。已经是True
或False
. - 如果结果集中只能有零行或一行,只需使用
If
语句调用Read
并测试结果。同样,它是Boolean
类型,所以没有必要将它与任何东西进行比较。如果它 returnsTrue
那么您可以访问您刚刚读取的行的数据。 - 如果可以有多行并且你不想在没有行的情况下做任何特殊的事情,那么只需使用
While
或Do While
循环来调用Read
和访问刚刚在循环中读取的行。 - 如果可以有多个行,并且您确实想在没有行的情况下做一些特殊的事情,请使用
If
语句来测试HasRows
,然后使用While
或Do While
在If
块内循环调用Read
。您将处理Else
块中没有行的情况。
假设 txtBGC1
和 txtBGC2
是文本框,你可以这样做,假设查询最多 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()