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

问题描述:

我只是难以理解如何处理此代码,我只是试图在插入客户表单上实现“无重复”捕获,但它只是通过我的if语句每次都去别的地方。这是来源。我也尝试了.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 

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

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

试试这个:

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

好点!我错过了这个在我原来闪闪发光的... – Achilles 2010-06-24 18:18:57

+0

Thx的小费,就在这笔钱。只是你给我的代码... 错误1'TextBox'是一种类型,不能用作表达式。 \t 错误2')'预计。 – javArc 2010-06-24 18:23:04

+0

啊,对不起,我的VB很生锈。铸造是不同的 - 代码应该是emailAddress = CType(FormView1.FindControl(“txtEmail”),TextBox).Text – womp 2010-06-24 18:25:26

除了Womp的答案...

于通过电子邮件记录运行while循环,你需要打出来的循环一旦你找到一个匹配的电子邮件,并提醒用户。

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

我会建议你通过emailAddress到SQL Server作为参数。

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

执行使用ExecuteScalar这一说法,并把结果作为一个整数。如果结果为零,则表示没问题,否则显示错误。

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

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

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

你可能想看看的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);