2010-06-24 149 views
0

我只是難以理解如何處理此代碼,我只是試圖在插入客戶表單上實現「無重複」捕獲,但它只是通過我的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 

回答

4
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

0

除了Womp的答案...

於通過電子郵件記錄運行while循環,你需要打出來的循環一旦你找到一個匹配的電子郵件,並提醒用戶。

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

我會建議你通過emailAddress到SQL Server作爲參數。

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

執行使用ExecuteScalar這一說法,並把結果作爲一個整數。如果結果爲零,則表示沒問題,否則顯示錯誤。

這樣做可以避免使用while循環,並且如果表中有很多行,應該快得多。

您還需要從電子郵件文本框中獲取Text屬性。

emailAddress = FormView1.FindControl("txtEmail").Text.ToString 
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); 
相關問題