【问题标题】:The parameterized query 'select ...' expects the parameter '@parameter', which was not supplied参数化查询“select ...”需要未提供的参数“@parameter”
【发布时间】:2014-02-02 10:05:33
【问题描述】:

仅在尝试加载页面时出现此错误。错误以粗体突出显示。

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) 名字 nvarchar(50) 姓氏 nvarchar(50) GuestAddress nvarchar(50) GuestTelephone nvarchar(50) DOB nvarchar(50) 性别 nvarchar(50) 电子邮件
nvarchar(50)

【问题讨论】:

  • 为什么这么多代码?仅发布相关端口。甚至 marc 也无法格式化所有代码
  • 你真的应该把你的代码缩小到实际的问题行 + / - 5。
  • 参数化查询 '(@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',但未提供。
  • 第 37 行:myConnect.Open();第 38 行:第 39 行:SqlDataReader reader = cmd.ExecuteReader();第 40 行:第 41 行:if (reader.Read())
  • 正如@Patrick Hofman 所说,缩小您的代码并仅发布相关行,这样可以节省资源,也便于其他人使用

标签: c# asp.net


【解决方案1】:

我认为@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"];
}

【讨论】:

  • 当我添加时,此 SqlParameterCollection 不包含具有 ParameterName '@nric' 的 SqlParameter。
  • 是的,添加了您编辑的代码,我得到了同样的错误。参数化查询“(@nric nvarchar(100))SELECT NRIC,StaffName FROM Staff WHERE NRIC”需要参数“@nric”,但未提供。
  • 我猜这是另一行代码,因为原始错误包含字段 'NRIC,Email,FirstName,LastName' 并且是从 Customer 中选择的
猜你喜欢
  • 2022-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-20
  • 2016-04-16
相关资源
最近更新 更多