Набор данных vb.net, возвращающий нулевое значение - PullRequest
1 голос
/ 11 января 2012

Привет, я погуглил за это ... прошло 2 дня ... это пустое занятие действительно треснуло мою голову! ... пожалуйста, кто-нибудь скажите мне, что-то не так с моим кодом ????

вот оно: -

Public Sub checkemail()
    sqlcheckemail = "select Email from WEBUSER where Email='" + TBEmail.Text + "'"
    Dim dscheckemail As New DataSet
    Dim sqlCnn As New SqlConnection
    'Dim MYNULL As String
    sqlCnn = New SqlConnection(connStr)
    sqlCmd = New SqlCommand(sqlcheckemail, sqlCnn)
    sqlCnn.Open()
    da.SelectCommand = sqlCmd
    da.Fill(dscheckemail)
    'MYNULL = CheckDBNull(dscheckemail)
    'If Not (dscheckemail.Tables.Count > 0) AndAlso (dscheckemail.Tables(0).Rows.Count > 0) Then
    'If Not IsDBNull(dscheckemail) Then
    'If Not (dscheckemail Is Nothing) Then
    'If MYNULL = "NULL" Then
    If Not dscheckemail Is Nothing Then
        LabelGender.Text = "There is something"
        'MsgBox("Unable to register because the E-mail address has already registered as a user, Please register using different Email address or contact administrator")
        'Response.Redirect("~/Rnewuser.aspx")
    Else
        'MsgBox("u can register")
        LabelGender.Text = "NULL"
    End If

    sqlCmd.Dispose()
    sqlCnn.Close()
End Sub

если вы видите тот, который я прокомментировал, это тот, на котором я уже гуглил проверенный ... так что теперь, если адрес электронной почты существует в базе данных ... все работает замечательно ... но если его не существует, код должен обработать тот, который не удовлетворяет первому оператору if ... но теперь я получаю результат как событие "Есть что-то", хотя электронная почта не существует в БД ....

ПОЖАЛУЙСТА, ПОМОГИТЕ МНЕ !!!! Я делал эту пустую вещь раньше ... но давным-давно, и я не сохранил коды .. теперь я делаю это обратно для моего собственного сайта ... и это меня взломало

Ответы [ 2 ]

3 голосов
/ 11 января 2012

Набор данных не является ничем, поэтому вводите if, вы должны проверить данные внутри.

'is not nothing, but is safer this way
If Not dscheckemail Is Nothing Then

    'Check there is a datatable inside the dataset and that it has rows
    If dscheckemail.Tables(0) Is Nothing OrElse dscheckemail.Tables(0).Rows.Count = 0 Then
        'is really empty
    Else
        'You have a dataTable with data.
    End If

End If
2 голосов
/ 11 января 2012

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

В следующем коде используется оператор SQL Server EXISTS, чтобы вы могли легко определить, есть ли какие-либо записи в базе данных с запрошенным адресом электронной почты. Если они есть, возвращается 1, в противном случае возвращается 0, что означает, что вам не нужно проверять наличие нулей.

Поскольку мы знаем, что будет возвращено только одно значение, мы можем изменить выполнение команды для использования executetescalar.

Код также использует параметр в команде для предотвращения внедрения SQL.

И, наконец, мы обертываем наши одноразовые предметы, используя операторы, чтобы гарантировать, что они правильно утилизируются.

Вот модифицированный код:

Public Sub checkemail()
    Using sqlCnn As New SqlConnection(connStr)
        Dim sqlcheckemail As String = "IF EXISTS(select 1 FROM WEBUSER WHERE Email=@Email) SELECT 1 ELSE SELECT 0"
        Using sqlCmd As New SqlCommand(sqlcheckemail, sqlCnn)
            sqlCmd.Parameters.AddWithValue("@Email", TBEMail.Text)
            sqlCnn.Open()

            If CBool(sqlCmd.ExecuteScalar) Then
                LabelGender.Text = "There is something"
                'MsgBox("Unable to register because the E-mail address has already registered as a user, Please register using different Email address or contact administrator")
                'Response.Redirect("~/Rnewuser.aspx")
            Else
                'MsgBox("u can register")
                LabelGender.Text = "NULL"
            End If
        End Using
        sqlCnn.Close()
    End Using
End Sub
...