Сравните значения из источника данных в строку - PullRequest
0 голосов
/ 24 июня 2010

Я просто озадачен тем, что делать с этим кодом, я просто пытаюсь реализовать функцию «без дубликатов» в моей клиентской форме вставки, но он просто пропускает мое выражение 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 ]

4 голосов
/ 24 июня 2010
emailAddress = FormView1.FindControl("txtEmail").ToString

просто возвращает строку "System.Web.UI.WebControls.TextBox".Вы не получаете доступ к фактическому свойству элемента управления, который будет содержать текстовое значение, вы просто вызываете ToString() для самого элемента управления.

Попробуйте это:

Dim emailBox As TextBox = CType(FormView1.FindControl("txtEmail"), TextBox);
emailAddress = emailBox.Text
0 голосов
/ 24 июня 2010

Возможно, вы захотите взглянуть на метод 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);
0 голосов
/ 24 июня 2010

Я бы порекомендовал передать emailAddress серверу SQL в качестве параметра.

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

Выполните этот оператор, используя ExecuteScalar, и приведите результат к целому числу. Если результат равен нулю, то все в порядке, в противном случае отображается ошибка.

Делая это таким образом, вы избегаете использования цикла while и должны быть намного быстрее, если в вашей таблице много строк.

Вам также необходимо получить свойство Text из поля Текст сообщения электронной почты.

emailAddress = FormView1.FindControl("txtEmail").Text.ToString
0 голосов
/ 24 июня 2010

В дополнение к ответу Вомпа ...

В цикле while, который проходит через записи электронной почты, вам нужно выйти из цикла, как только вы найдете соответствующее письмо и предупредите пользователя.

if reader("EmailAddress") = (emailAddress) then
  '1.  Break from the Loop
End if
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...