Параметризованный запрос, который не был предоставлен - PullRequest
10 голосов
/ 21 июля 2011

Я получаю эту ошибку:

Параметризованный запрос '(@AdminEmail nvarchar (4000), @ AdminPassword nvarchar (4000)) SELECT' ожидает параметр '@AdminEmail', который не был

код:

Public Function AuthenticateAdmin() As Boolean
    Dim Success As Boolean

    Dim strConn As String
    strConn = ConfigurationManager.ConnectionStrings("HMVDb").ToString
    Dim conn As New SqlConnection(strConn.ToString())

    Dim cmd As New SqlCommand("SELECT * FROM Admin WHERE AdminEmail=@AdminEmail AND Adminpassword=@Adminpassword", conn)
    cmd.Parameters.AddWithValue("@AdminEmail", EMail)
    cmd.Parameters.AddWithValue("@AdminPassword", Password)

    Dim da As New SqlDataAdapter(cmd)

    Dim ds As New DataSet

    conn.Open()
    da.Fill(ds, "Admin")
    conn.Close()

    If ds.Tables("Admin").Rows.Count > 0 Then

        Dim aemail As String = ds.Tables("Admin").Rows(0).Item("AdminEmail")
        Dim apass As String = ds.Tables("Admin").Rows(0).Item("AdminPassword")
        Dim aid As Integer = ds.Tables("Admin").Rows(0).Item("AdminID")
        Dim aname As String = ds.Tables("Admin").Rows(0).Item("AdminName")

        If EMail = aemail And Password = apass Then
            ID = aid ' Shopper ID that identify Ecader
            Name = aname
            Success = True 'Shopper is authenticated
        Else
            Success = False 'Authentication fail
        End If
    End If


    'Return the authentication result to calling program
    Return Success
End Function

Ответы [ 3 ]

42 голосов
/ 21 июля 2011

Ваша @AdminEmail переменная EMail равна нулю.Вы не можете передать null на обязательном параметре.Используйте DBNull.Value.

При использовании null вы сообщаете Sql Server, что пропускаете параметр.Это может быть полезно для необязательного параметра со значением по умолчанию, но вызывает ошибку для обязательного параметра.

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

Например:

public static object GetDataValue(object value)
{
   if(value == null)
   {
       return DBNull.Value;
   }

   return value;
}

и затем использовать

cmd.Parameters.AddWithValue("@AdminEmail", GetDataValue(EMail))
1 голос
/ 21 июля 2011

Просмотрите ваш код и посмотрите, каковы значения Email и Password. Скорее всего, они нулевые.

1 голос
/ 21 июля 2011

Возможно ли, что свойство EMail имеет значение null (Email is Nothing)? Я думаю, что вы можете получить эту ошибку в этом случае. Убедитесь, что EMail = String.Empty или EMail = "" перед тем, как установить значение параметра.

Редактировать: или, как предлагает другой ответ, вместо этого вы можете отправить DBNull.Value, если вы действительно хотите, чтобы в вашей базе данных были нулевые значения.

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