将数据源中的值与字符串进行比较

时间:2010-06-24 18:13:44

标签: asp.net vb.net string

我只是对如何处理这段代码感到难过,我只是想在我的插入客户表单上实现一个'无重复'的捕获,但它每次都只是通过我的if语句滑到else。这是来源。我也尝试了一个结果相同的.Equals :(

 Protected Sub srcAllClients_Inserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) Handles srcAllClients.Inserting
        'Establish Variables
        Dim emailAddress As String
        Dim srcUsers As SqlDataSource = New SqlDataSource()

        srcUsers.ConnectionString = ConfigurationManager.ConnectionStrings("ISSD21ConnectionString").ConnectionString

        Dim view As DataView
        view = DirectCast(srcUsers.Select(DataSourceSelectArguments.Empty), DataView)
        srcUsers.SelectCommand = "SELECT EmailAddress FROM ISSDClients"
        srcUsers.DataSourceMode = SqlDataSourceMode.DataReader
        Dim reader As IDataReader
        reader = DirectCast(srcUsers.Select(DataSourceSelectArguments.Empty), IDataReader)

        emailAddress = FormView1.FindControl("txtEmail").ToString

        While reader.Read()
            If reader("EmailAddress") = (emailAddress) Then
                lblError.Text = "Your Email is NOT Unique!"
                'this is where we cancel the update and return an error
            Else
                lblError.Text = "Your Email is Unique!"
                'nothing needs to happen, maybe just tell them that it went through
            End If
        End While

        reader.Close()
    End Sub

4 个答案:

答案 0 :(得分:4)

emailAddress = FormView1.FindControl("txtEmail").ToString

将返回字符串“System.Web.UI.WebControls.TextBox”。您没有访问保存文本值的控件的实际属性,您只是在控件本身上调用ToString()

试试这个:

Dim emailBox As TextBox = CType(FormView1.FindControl("txtEmail"), TextBox);
emailAddress = emailBox.Text

答案 1 :(得分:0)

除了Womp的回答......

在通过电子邮件记录运行的while循环中,一旦找到匹配的电子邮件并提醒用户,您需要突破循环。

if reader("EmailAddress") = (emailAddress) then
  '1.  Break from the Loop
End if

答案 2 :(得分:0)

我建议您将emailAddress作为参数传递给SQL Server。

Select Count(EmailAddress) From ISSDClients
Where EmailAddress = @EmailAddress

使用ExecuteScalar执行此语句并将结果转换为整数。如果结果为零,则表示您没问题,否则会显示错误。

这样做可以避免使用while循环,如果你的表有很多行,它应该快得多。

您还需要从“电子邮件文本”框中获取“文本”属性。

emailAddress = FormView1.FindControl("txtEmail").Text.ToString

答案 3 :(得分:0)

您可能需要查看String.Compare方法,这样可以更轻松地进行比较,而不考虑区分大小写和文化。它确实将空格视为字符串的一部分,因此您可能希望在调用字符串之前对其进行修剪,以帮助规范化。

例如,以下字符串将被视为相等:

var firstString  = "some StrinG to Compare  ";
var secondString = "  somE string to COMPARE";

var equal = (String.Compare(firstString.Trim(), secondString.Trim(), StringComparison.InvariantCultureIgnoreCase) == 0);