Sql server 使用存储过程从数据库检索数据

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

我正在使用存储过程从数据库中提取项目列表,但不断出现以下错误:

过程或函数“requisition\u sp\u getItemNum”需要参数“@reqNumber”,但未提供该参数

我使用hiddenfor来提供reqNumber,但这会抛出相同的错误消息

存储过程:

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
{

}