这是不提供的参数化查询 [英] The parameterized query which was not supplied

查看:135
本文介绍了这是不提供的参数化查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不断收到此错误:


  

在参数化查询(@AdminEmail为nvarchar(4000),@ ADMINPASSWORD
  为nvarchar(4000))SELECT'预计参数'@AdminEmail,这是
  未提供。


code:

 公共功能AuthenticateAdmin()为布尔
    昏暗的成功作为布尔    函数创建一个字符串
    创建失败= ConfigurationManager.ConnectionStrings(HMVDb)。的ToString
    昏暗康恩作为新的SqlConnection(strConn.ToString())    昏暗CMD作为新的SqlCommand(SELECT * FROM admin其中ADMINEMAIL = @ ADMINEMAIL AND ADMINPASSWORD = @ ADMINPASSWORD,康涅狄格州)
    cmd.Parameters.AddWithValue(@ ADMINEMAIL,电子邮件)
    cmd.Parameters.AddWithValue(@ ADMINPASSWORD,密码)    昏暗的DA作为新的SqlDataAdapter(CMD)    昏暗的DS作为新的数据集    conn.Open()
    da.Fill(DS,管理)
    conn.Close()    如果ds.Tables(管理)Rows.Count> 0,则        昏暗aemail作为字符串= ds.Tables(管理)。行(0).Item(ADMINEMAIL)
        昏暗apass作为字符串= ds.Tables(管理)。行(0).Item(ADMINPASSWORD)
        昏暗的援助作为整数= ds.Tables(管理)。行(0).Item(AdminID)
        昏暗的aname的String = ds.Tables(管理)。行(0).Item(AdminName)        如果EMAIL = aemail和密码= apass然后
            标识Ecader ID =援助购物者ID
            名称= aname
            成功=真正的'购物者进行身份验证
        其他
            成功=假身份验证失败
        万一
    万一
    '返回验证结果,调用程序
    返回成功
结束功能


解决方案

@AdminEmail 变量电子邮件为空。你可以不通过上必需的参数。使用 DBNull.Value

在使用,你会忽略参数,你是通知SQL Server中。这可以是具有默认值的可选参数是有用的,但会导致错误的必需参数。

我建议您使用始终传递值命令参数时使用效用函数。

例如:

 公共静态对象GetDataValue(对象的值)
{
   如果(价值== NULL)
   {
       返回DBNull.Value;
   }   返回值;
}

,然后用

  cmd.Parameters.AddWithValue(@ ADMINEMAIL,GetDataValue(电子邮件))

I keep getting this error :

The parameterized query '(@AdminEmail nvarchar(4000),@AdminPassword nvarchar(4000))SELECT' expects the parameter '@AdminEmail', which was not supplied.

Code:

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

解决方案

Your @AdminEmail variable EMail is null. You cannot pass a null on a required parameter. Use DBNull.Value.

When using null, you are informing Sql Server that you are omitting the parameter. This can be useful for an optional parameter with a default value, but causes an error for a required parameter.

I recommend that you use always use a utility function when passing a value to a command parameter.

For example:

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

   return value;
}

and then use

cmd.Parameters.AddWithValue("@AdminEmail", GetDataValue(EMail))

这篇关于这是不提供的参数化查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆