Что-то с моей логикой в ​​этом коде ADO.NET? это всегда вернуть ложь? - PullRequest
0 голосов
/ 06 июня 2009

Это простая функция, которая возвращает TRUE, если пользователь существует в таблице users, и false в противном случае.

По какой-то причине всегда возвращается false, я даже удалил предложение WHERE и все равно получаю false? (ручная проверка в анализаторе запросов говорит мне, что у меня много строк?)

Public Shared Function DoesUserExist(ByVal userID As Integer) As Boolean

    Dim retValue As Boolean

    retValue = False

    Using conn As New SqlConnection(GetConnectionString())

        'Dim cmd As SqlCommand = New SqlCommand("SELECT user_ID FROM users WHERE user_ID = @userID", conn)
        Dim cmd As SqlCommand = New SqlCommand("SELECT user_ID FROM users", conn)


        cmd.Parameters.Add("@userID", SqlDbType.NVarChar).Value = userID
        cmd.CommandType = CommandType.Text

        conn.Open()

        Dim reader As SqlDataReader = cmd.ExecuteReader()


        'If Not reader Is Nothing Then
        '    HttpContext.Current.Response.Write("<br>Null")
        'End If

        If reader.Read() Then

            retValue = True

        End If


        conn.Close()

        cmd.Dispose()

    End Using


    retValue = False



    Return retValue

End Function

Ответы [ 5 ]

5 голосов
/ 06 июня 2009

Вы устанавливаете retValue в false перед выходом. В этом проблема.

Это правильный код:

...

    If reader.Read() Then

        retValue = True

    Else

        retValue = False

    End If


    conn.Close()

    cmd.Dispose()

End Using

Return retValue

....
2 голосов
/ 06 июня 2009

Это потому, что вы устанавливаете retValue в false перед возвратом.

Неважно, что вы установили ранее - оно всегда будет ложным в конце функции следующими строками:

retValue = False
Return retValue
2 голосов
/ 06 июня 2009

это может быть строка в конце, которая устанавливает "retValue" в false?

1 голос
/ 06 июня 2009

В коде есть две проблемы.

1: Вы не используете параметр @userID в запросе. Поэтому он всегда возвращает всех пользователей, и единственный случай, когда результат будет пустым, - это если вообще нет пользователей.

Dim cmd As SqlCommand = New SqlCommand("SELECT user_ID FROM users where user_ID = @UserID", conn)

2: Вы устанавливаете переменную retValue на false снова перед оператором return. Поэтому метод всегда возвращает false независимо от результата проверки чтения данных.

Кроме того, вы должны позвонить Dispose на считыватель данных.

0 голосов
/ 06 июня 2009

Вы устанавливаете retValue в false прямо перед возвратом, и в вашем коде нет другого оператора Return, поэтому не имеет значения, что происходит раньше. Удалить последнее значение = False.

Вы хотите что-то вроде этого:

Public Shared Function DoesUserExist(ByVal userID As Integer) As Boolean

    Dim retValue As Boolean

    retValue = False

    Using conn As New SqlConnection(GetConnectionString())
         // conditionally set retValue = true, etc.
    End Using

    Return retValue

End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...