【问题标题】:The parameterized query which was not supplied未提供的参数化查询
【发布时间】:2011-07-21 15:20:47
【问题描述】:

我不断收到此错误:

参数化查询'(@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

【问题讨论】:

标签: asp.net sql-server vb.net visual-studio-2008


【解决方案1】:

您的@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))

【讨论】:

  • 很棒的功能。正是我需要的。非常感谢。
【解决方案2】:

EMail 属性是否有可能为空(Email is Nothing)?我认为在这种情况下您可能会遇到该错误。在设置参数值之前,请确保 EMail = String.Empty 或 EMail = ""。

编辑:或者正如另一个答案所建议的那样,如果您确实希望数据库中包含空值,则可以发送 DBNull.Value。

【讨论】:

    【解决方案3】:

    单步调试您的代码,看看Email 和Password 的值是什么。它们可能是空的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-20
      相关资源
      最近更新 更多