For..Next 不使用 vb.net 中的数据集列

For..Next not working with dataset column in vb.net

'validatation begin
'Validate User ID 
Private Sub txtUid_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtUid.LostFocus
    Try
        Dim sel As String
        sel = "SELECT uid FROM user_master"
        Dim cnn As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\RSMS_DB.mdf;Integrated Security=True;User Instance=True")
        Dim da As New SqlDataAdapter(sel, cnn)
        Dim ds As New DataSet()
        da.Fill(ds)
        Dim count As Integer = ds.Tables(0).Rows.Count
        For i As Integer = 0 To count - 1
            If ds.Tables(0).Rows(i)("uid") = txtUid.Text Then
                ErrorProviderUidExist.SetError(txtUid, "User ID already exists! Please Try a Unique User ID!")
            Else
                ErrorProviderUidExist.SetError(txtUid, "")
                ErrorProviderUidExist.Clear()
            End If
        Next
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Critical, "Database Failure!")
    End Try
    If txtUid.Text = Nothing Then
        ErrorProvider1.SetError(txtUid, "User ID Required!")
    Else
        ErrorProvider1.SetError(txtUid, "")
        ErrorProvider1.Clear()
    End If
End Sub

我在 vb.net 中编写了这段代码,以使用错误提供程序生成警告。如果用户输入的用户 ID 已被使用,它会生成警告。 在数据库中,我创建了三个用户 ID,1、2 和 3。

我的问题是当我在测试时输入 1 时会产生错误,但当我输入 2 或 3 时却不会。

该代码只有在匹配最后一行时才会起作用。那是因为,如果你找到了一个匹配项,你继续测试剩余的行,它们将不匹配,所以你将清除你之前设置的错误消息。您需要做的是在找到匹配项时停止。这就是 Exit For 的目的。