Sql server 使用存储过程从数据库检索数据
我正在使用存储过程从数据库中提取项目列表,但不断出现以下错误: 过程或函数“requisition\u sp\u getItemNum”需要参数“@reqNumber”,但未提供该参数 我使用hiddenfor来提供reqNumber,但这会抛出相同的错误消息 存储过程:Sql server 使用存储过程从数据库检索数据,sql-server,asp.net-mvc,stored-procedures,Sql Server,Asp.net Mvc,Stored Procedures,我正在使用存储过程从数据库中提取项目列表,但不断出现以下错误: 过程或函数“requisition\u sp\u getItemNum”需要参数“@reqNumber”,但未提供该参数 我使用hiddenfor来提供reqNumber,但这会抛出相同的错误消息 存储过程: ALTER PROCEDURE [dbo].[requisition_sp_getItemNum] @reqNumber VARCHAR(50) AS BEGIN SELECT a.ITEMN
ALTER PROCEDURE [dbo].[requisition_sp_getItemNum]
@reqNumber VARCHAR(50)
AS
BEGIN
SELECT
a.ITEMNMBR, a.ITEMDESC, ab.employee_id,
ab.department, ab.employee_name, quantity_requested,
b.expense_acc, c.ACTDESCR + '/' + c.ACTNUMBR_1 + '-' + c.ACTNUMBR_2 [Expense_Acc],
b.unit_of_measure
FROM
[TWCL].[dbo].IV00101 a
INNER JOIN
RequisitionItem b ON a.ITEMNMBR = b.item_no
INNER JOIN
Requisition ab ON ab.Req_No = b.Req_No
INNER JOIN
[TWCL].dbo.GL00100 c ON b.expense_acc = c.ACTINDX
WHERE
b.Req_No = @reqNumber AND ab.status = -1
END
看法
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()
@复选框(“TheOneCheckBoxToRuleThemAll”)全选
日期
申请编号
费用账户
请求者
部门
LoggedinAs
项目编号
描述
量
计量单位
@for(int i=0;im[i].reqNumber)
@Html.HiddenFor(m=>m[i].reqNumber)
@Html.CheckBoxFor(m=>m[i].postTrnx,新的{@class=“checkGroup1”})
@DisplayFor(m=>m[i].reqDate)
@DisplayFor(m=>m[i].reqNumber)
@项目.费用\科目.科目\说明
@item.employeeDetails.employeeNum
@item.employeeDetails.department
@item.employeeDetails.LoggedInUserName
@item.itemNumber
@项目.说明
@项目.数量
@item.selectedoumtext
@*@ActionLink(“编辑”,“编辑”,新建{id=@item.lineNum,name=Model[i].reqNumber})*@
}
}
模型
公共列表GetRequestItemByRequestion(字符串reqNumber)
{
列表项=新列表();
SqlConnection TWCLOPConnect=新的SqlConnection(connectionString.ToString());
SqlCommand itemscommand=newsqlcommand();
SqlDataReader-itemRdr;
itemscommand.CommandText=“请购单\u sp\u getItemNum”;
itemscommand.CommandType=CommandType.StoredProcess;
itemscommand.Connection=TWCLOPConnect;
itemscommand.Parameters.Add(“@reqNumber”,SqlDbType.VarChar).Value=reqNumber;
尝试
{
TWCLOPConnect.Open();
itemRdr=itemscommand.ExecuteReader();
while(itemRdr.Read())
{
项目=新项目();
item.itemNumber=itemRdr.GetString(0);
item.description=itemRdr.GetString(1);
item.employeeDetails.employeeNum=Convert.ToInt32(itemRdr.GetString(2));
item.employeeDetails.department=itemRdr.GetString(3);
item.employeeDetails.LoggedInUserName=itemRdr.GetString(4);
item.quantity=转换为双(itemRdr[5]);
item.expense\u account.index=itemRdr.GetInt32(6);
item.expense\u account.account\u desc=itemRdr.GetString(7);
item.selectedoumtext=itemRdr.GetString(8);
项目。添加(项目);
}
itemRdr.Close();
}
捕获(例外情况除外)
{
掷骰子;
}
最后
{
twclop connect.Close();
}
退货项目;
}
从存储过程@reqNumber
中选择变量:
@reqNumber varchar (50)
以及您在此处添加的变量@Req\u No
itemscommand.Parameters.Add("@Req_No", SqlDbType.VarChar).Value = Req_No;
必须匹配
更改此项:
itemscommand.Parameters.Add("@reqNumber", SqlDbType.VarChar).Value = reqNumber;
为此:
itemscommand.Parameters.Add("@reqNumber", reqNumber);
新方法:你能把你的代码改成这个吗
SqlConnection TWCLOPConnect = new SqlConnection(connectionString.ToString());
SqlCommand itemscommand = new SqlCommand("requisition_sp_getItemNum", TWCLOPConnect);
itemscommand.CommandType = CommandType.StoredProcedure;
itemscommand.Parameters.Add("@reqNumber", reqNumber);
SqlDataReader itemRdr;
try
{
}
查看程序中参数的名称(reqNumber)和代码中的名称(Req\U No)。它们不一样。@SeanRange;除了不匹配之外,还有什么会导致此错误。如何为参数的reqNumberValues提供数据是通过代码中似乎包含的Value属性访问的。但我仍然收到错误,因此我不明白该值与此错误无关。问题在于您是否提供了段落现在很难说,因为您的代码在您的问题中已更改。您是否重新编译,如果您是从服务器运行此程序,您是否将新的位发布到服务器?您是否尝试运行sql profiler以便可以看到正在执行的命令?您是否可以通过提供硬编码变量自行运行SP?它必须为您提供结果如果您没有其他问题,是的,我可以提供所需的结果。但是在调试itemscommand.Parameters.Add(“@reqNumber”,SqlDbType.VarChar)。Value=reqNumber;这将返回null@SujaeBrown此语句`itemscommand.Parameters.Add(“@reqNumber”,SqlDbType.VarChar).Value=reqNumber;`将不返回结果;如果返回null
itemscommand.Parameters[0]。Value
则reqNumber
为null…我将如何提供该值?您是否尝试了更新后的答案?它来自工作示例。
itemscommand.Parameters.Add("@reqNumber", reqNumber);
SqlConnection TWCLOPConnect = new SqlConnection(connectionString.ToString());
SqlCommand itemscommand = new SqlCommand("requisition_sp_getItemNum", TWCLOPConnect);
itemscommand.CommandType = CommandType.StoredProcedure;
itemscommand.Parameters.Add("@reqNumber", reqNumber);
SqlDataReader itemRdr;
try
{
}