检查每个CheckBoxList项执行存储过程的麻烦

时间:2014-03-04 19:26:52

标签: c# sql sql-server visual-studio stored-procedures

我正在使用Visual Basic 2012和Microsoft SQL Server 2008创建一个网页,允许用户输入多个学生的学生会费。 (即:50个新认捐将产生2014年秋季学期50.00美元的承诺会费)

正在填充的表格如下:

+----------------+--------------+
| Dues_ID        | int (pk)     |
| Enrollment ID  | int          |
| Type           |  varchar(50) |
| Dues_owed      | int          |
| Description    | varchar(MAX) |
+----------------+--------------+

我的pk自动递增。用户通过从下拉列表中选择下降或弹簧来输入enrollment_id,并从下拉列表中选择一年。选择这些选项后,将生成一个复选框列表,列出学生在该学期和年份中注册的内容。存储过程如下:

ALTER PROCEDURE dbo.SelectStudDueIncrCklst
@Term varchar(50),
@Year int


AS

SELECT S.First_name + ' ' + S.Last_name AS Name, E.Enrollment_ID
FROM Student S
INNER JOIN Student_Enrollment E
ON S.Student_ID = E.Student_ID
WHERE 
(E.Term = @Term)
 AND
(E.Year = @Year)

我正在尝试允许用户选择多个学生并输入相同的到期信息,但是只有所选的第一个正在通过插入存储过程运行:

ALTER PROCEDURE dbo.InsertStudDues
@Enrollment_ID int,
@Type varchar(50),
@Dues_owed int,
@Description varchar(MAX)

AS 
DECLARE
@pkStudDues int
set @pkStudDues = 0

SELECT
@pkStudDues=Dues_ID
FROM 
Student_Dues
WHERE
 (Enrollment_ID = @Enrollment_ID)
AND
 (Type = @Type)


IF @pkStudDues = 0

BEGIN
INSERT INTO dbo.[Student_Dues]
    ([Enrollment_ID]
    ,[Type]
    ,[Dues_owed]
    ,[Description])
VALUES
    (@Enrollment_ID
    ,@Type
    ,@Dues_owed
    ,@Description)

    END

我的代码(c#):

protected void AddDuesbtn_Click(object sender, EventArgs e)
{
    foreach (ListItem c in StdDueNmcklist.Items)
    {
        if (!c.Selected) continue;

            InsertStudDuesdatcon.Insert();
            AddDuesbtn.Visible = false;
            CnfrmStudDueAddlbl.Visible = true;
            CnfrmStudDueAddbtn.Visible = true;



     }

}

就像我说的那样,它只会插入所选的第一个复选框列表。

非常感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

问题是循环会重新启动并返回第一个复选框。由于此项已经输入,存储过程将关闭。

protected void AddDuesbtn_Click(object sender, EventArgs e)
{

   for (int i = 0; i < StdDueNmcklist.Items.Count; i++)
   {
       if (StdDueNmcklist.Items[i].Selected)
       {


           InsertStudDuesdatcon.Insert();
           AddDuesbtn.Visible = false;
           CnfrmStudDueAddlbl.Visible = true;
           CnfrmStudDueAddbtn.Visible = true;
           StdDueNmcklist.Items[i].Selected = false;

       }


     }