C# 网页Asp.net MVC上的数据复制

C# 网页Asp.net MVC上的数据复制,c#,asp.net-mvc,stored-procedures,C#,Asp.net Mvc,Stored Procedures,当我将项目输入数据库表并将这些项目添加到它不断复制的网页上时,我遇到了这个问题。调试后,我发现这是行items.Add(item);。存储过程会返回数据库中的项目数量和请购单编号上的项目数量。这就是它看起来的样子,这就是我所期望的。我只输入了两个输入的项目,这是因为我输入了四个项目 存储过程 @Req_No varchar (50) AS BEGIN SELECT a.ITEMNMBR, a.ITEMDESC, ab.employee_id, ab.department,

当我将项目输入数据库表并将这些项目添加到它不断复制的网页上时,我遇到了这个问题。调试后,我发现这是行items.Add(item);。存储过程会返回数据库中的项目数量和请购单编号上的项目数量。这就是它看起来的样子,这就是我所期望的。我只输入了两个输入的项目,这是因为我输入了四个项目

存储过程

 @Req_No 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 = @Req_No
模型

公共列表GetRequestItemByRequestion(字符串请求号)
{
列表项=新列表();
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(“@Req\u No”,SqlDbType.VarChar).Value=Req\u No;
尝试
{
TWCLOPConnect.Open();
itemRdr=itemscommand.ExecuteReader();
while(itemRdr.Read())
{
项目=新项目();
item.itemNumber=itemRdr.GetString(0);
item.description=itemRdr.GetString(1);
item.price=Convert.ToDouble(itemRdr[3]);
item.quantity=转换为双(itemRdr[4]);
item.expense\u account.index=itemRdr.GetInt32(5);
item.expense\u account.account\u desc=itemRdr.GetString(6);
item.selectedoumtext=itemRdr.GetString(8);
项目。添加(项目);
}
itemRdr.Close();
}
捕获(例外情况除外)
{
掷骰子;
}
最后
{
twclop connect.Close();
}
退货项目;
}

存储过程返回重复的行:

    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 = @Req_No 
在sql中运行此存储过程,您将看到它

有时,使用内部联接从数据库返回的不匹配或额外数据很容易。 一次拆下一个内接头并检查

所有这行代码都执行以下操作:

   itemRdr = itemscommand.ExecuteReader();

            while (itemRdr.Read())
            {
                Item item = new Item();
                item.itemNumber = itemRdr.GetString(0);

        item.description = itemRdr.GetString(1);
                item.price = Convert.ToDouble(itemRdr[3]);
                item.quantity = Convert.ToDouble(itemRdr[4]);
                item.expense_account.index = itemRdr.GetInt32(5);
                item.expense_account.account_desc = itemRdr.GetString(6);

                item.selecteduomtext = itemRdr.GetString(8);
                items.Add(item);
            }
正在读取返回的行,当它仍在读取时,将添加行。
这意味着您的存储过程返回了重复的行数。

您的存储过程返回重复的行数:

    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 = @Req_No 
在sql中运行此存储过程,您将看到它

有时,使用内部联接从数据库返回的不匹配或额外数据很容易。 一次拆下一个内接头并检查

所有这行代码都执行以下操作:

   itemRdr = itemscommand.ExecuteReader();

            while (itemRdr.Read())
            {
                Item item = new Item();
                item.itemNumber = itemRdr.GetString(0);

        item.description = itemRdr.GetString(1);
                item.price = Convert.ToDouble(itemRdr[3]);
                item.quantity = Convert.ToDouble(itemRdr[4]);
                item.expense_account.index = itemRdr.GetInt32(5);
                item.expense_account.account_desc = itemRdr.GetString(6);

                item.selecteduomtext = itemRdr.GetString(8);
                items.Add(item);
            }
正在读取返回的行,当它仍在读取时,将添加行。
这意味着您的存储过程返回了重复的行数。

那么,您的实际问题是什么?这是什么项。添加(项);。不断循环以重复输入的相同数据对我来说很难说。您能否显示实际输出和预期输出的简单版本?我已经更新了问题尝试在SSMS中执行您的存储过程。它是否工作正常,没有重复?也许是因为Joinso,你真正的问题是什么?这个项目是什么。添加(项目);。不断循环以重复输入的相同数据对我来说很难说。您能否显示实际输出和预期输出的简单版本?我已经更新了问题尝试在SSMS中执行您的存储过程。它是否工作正常,没有重复?可能是因为joins,但当我执行存储过程时,它会返回任何重复项。我已将其更改为select*from REQUESITION,其中status=-1,但是当我执行此foreach(postingObj中的var项){if(item.postTrnx){reqNumbers.Add(item.reqNumber)时;}}它给出了一个空错误。当我使用另一个存储过程时,postingObj返回2个计数。我的问题是,为什么有时它不重复,但有时它会重复,但当我执行存储过程时,它会返回任何重复项。我已将其更改为“从申请中选择*”,其中状态=-1,但当我执行此foreach(postingObj中的变量项){if(item.postTrnx){reqNumbers.Add(item.reqNumbers);}}它给出了一个空错误。当我使用另一个存储过程时,postingObj返回一个2My的计数。我的问题是,为什么有时它不重复,但有时它会重复