正如標題所述,我正在嘗試將文本框條目與存盤在我的資料庫中的可接受值串列進行比較或驗證。到目前為止,我已從資料庫中獲取值并將它們存盤在 List(of String) 中,并且我有一個 for 回圈,該回圈遍歷該串列并在值匹配時回傳 true,如果值不匹配則回傳 false . 下面我附上了我目前正在使用的代碼。
Protected Sub txtSearchOC_TextChanged(sender As Object, e As EventArgs) Handles txtSearchOC.TextChanged
Dim listEType As List(Of String) = New List(Of String)
Dim eType As String = txtSearchOC.Text
Dim strResult As String = ""
lblPrefix.Text = ""
lblList.Text = ""
Dim TypeIDQuery As String = "
SELECT a.OrderCode
FROM SKU AS a
INNER JOIN EnrollmentType AS e ON a.EnrollmentTypeID = e.TypeID
INNER JOIN Enrollment AS f ON e.RecID = f.EnrollmentTypeID
WHERE f.AccountNumber = '12345';
"
Using connEType As New SqlConnection(ConfigurationManager.ConnectionStrings("WarrantyConnectionString").ToString)
Using cmdEType As New SqlCommand(TypeIDQuery, connEType)
cmdEType.Parameters.Add("@AccountNumber", SqlDbType.VarChar, 15).Value = "12345"
connEType.Open()
Using sdrEType As SqlDataReader = cmdEType.ExecuteReader
While sdrEType.Read
listEType.Add(sdrEType("OrderCode").ToString)
End While
End Using
End Using
End Using
For Each Item As String In listEType
strResult &= Item & ", "
Next
For i = 0 To listEType.Count - 1
If eType = listEType(i) Then
lblPrefix.Text = "True"
End If
If eType <> listEType(i) Then
lblList.Text = "Error"
End If
Next
'lblList.Text = strResult
End Sub
在代碼中,我宣告了我的串列和一個變數來存盤文本框的文本值。為了驗證它是否從資料庫中提取了適當的值,我有 strResult 變數,并且可以確認正在存盤適當的值。
我遇到的問題與底部的 For 回圈有關,當我輸入包含在 listEType 中的有效值時,我收到“True”的確認訊息,表明它與其中一個值匹配,但我也收到指示它不匹配的“錯誤”訊息。如果我輸入的值未包含在串列中,我只會收到應該發生的“錯誤”訊息。
我的問題是,根據我提供的代碼,為什么 For 回圈會同時回傳“True”和“Error”以獲得有效條目?此外,如果有更好的方法來完成我正在嘗試做的事情,那么可以說我全神貫注,因為我對編程還比較陌生。
uj5u.com熱心網友回復:
好吧,正如其他人所建議的那樣,下拉(組合框)會更好。
但是,讓我們假設由于某種原因您不想要組合框。
我不會回圈資料。你有這個驚人的資料庫引擎,它可以完成所有的作業——而且不需要為這樣的操作回圈資料。為什么不查詢資料庫并檢查值?
像這樣說:
Protected Sub txtSearchOC_TextChanged(sender As Object, e As EventArgs) Handles txtSearchOC.TextChanged
If txtSearchOC.Text <> "" Then
Dim TypeIDQuery As String = "
SELECT a.OrderCode FROM SKU AS a
INNER JOIN EnrollmentType AS e ON a.EnrollmentTypeID = e.TypeID
INNER JOIN Enrollment AS f ON e.RecID = f.EnrollmentTypeID
WHERE f.AccountNumber = @AccoutNumber;"
Using connEType As New SqlConnection(ConfigurationManager.ConnectionStrings("WarrantyConnectionString").ToString)
Using cmdEType As New SqlCommand(TypeIDQuery, connEType)
cmdEType.Parameters.Add("@AccountNumber", SqlDbType.NVarChar).Value = txtSearchOC.Text
connEType.Open()
Dim rstData As New DataTable
rstData.Load(cmdEType.ExecuteReader)
If rstData.Rows.Count > 0 Then
' we have a valid match
lblPrefix.Text = "True"
Else
' we do not have a valid match
lblPrefix.Text = "False"
End If
End Using
End Using
End If
End Sub
因此,將資料拉入資料表。然后,您可以檢查行數,甚至可以從該行中提取其他值。但是,我認為這里不需要一些回圈。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/493672.html
