参数化查询'select ...'需要参数'@parameter',这是未提供的

时间:2014-02-02 10:05:33

标签: c# asp.net

我在尝试加载页面时遇到此错误。错误以粗体突出显示。

string strConnectionString = "...";
SqlConnection myConnect = new SqlConnection(strConnectionString);
string strCommandText = "SELECT NRIC,Email,FirstName,LastName FROM Customer WHERE NRIC=@nric";
SqlCommand cmd = new SqlCommand(strCommandText, myConnect);
cmd.Parameters.Add("@nric", SqlDbType.NVarChar, 100);
cmd.Parameters["@nric"].Value = (String)Session["CustomerNRIC"];
myConnect.Open();

SqlDataReader reader = cmd.ExecuteReader();

错误消息是:

  

参数化查询'(@ nric nvarchar(100))SELECT NRIC,Email,FirstName,LastName   FROM C'需要参数'@nric',这是未提供的。描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。异常详细信息:System.Data.SqlClient.SqlException:参数化查询'(@ nric nvarchar(100))SELECT NRIC,Email,FirstName,LastName FROM C'需要参数'@nric',这是未提供的。

我的客户表

  

GuestID nvarchar(max)NRIC nvarchar(50)   FirstName nvarchar(50)LastName nvarchar(50)   GuestAddress nvarchar(50)GuestTelephone nvarchar(50)DOB   nvarchar(50)性别nvarchar(50)电子邮件
  为nvarchar(50)

1 个答案:

答案 0 :(得分:2)

我认为@nric的价值是null。在这种情况下,参数是“未指定”。如果null是您查询中的有效值,请使用DBNull.Value

cmd.Parameters.Add("@nric", SqlDbType.NVarChar, 100);

if (string.IsNullOrEmpty((string)Session["CustomerNRIC"]))
{
    cmd.Parameters["@nric"].Value = DBNull.Value;
}
else
{
    cmd.Parameters["@nric"].Value = Session["CustomerNRIC"];
}