Параметрированный запрос, который не был предоставлен

Я продолжаю получать эту ошибку:

Параметрированный запрос '(@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 [email protected] AND [email protected]", 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

Ответ 1

Ваша переменная @AdminEmail EMail имеет значение null. Вы не можете передать 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))

Ответ 2

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

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

Ответ 3

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