我一直收到这个错误:
参数化查询'(@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
答案 0 :(得分:42)
您的@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 :(得分:1)
EMail属性是否可能为null(Email is Nothing)?我想你可能会在那种情况下得到那个错误。在设置参数值之前,请确保EMail = String.Empty或EMail =“”。
编辑:或者如另一个答案所示,如果你真的想在数据库中使用空值,你可以发送DBNull.Value。
答案 2 :(得分:1)
逐步查看代码,了解Email
和Password
的价值。它们可能是空的。