需要改进我的db语法

时间:2016-05-21 23:55:12

标签: c# asp.net ms-access

概述:这是一个代码,学生可以注册他想要阅读的课程。 他应该只接受一门课程,而不是更多这是我遇到问题的地方)。虽然学生可以通过优先选择1-3同时搜索最多3门课程。

如果课程已满,则学生将从1开始获得队列索引。一旦在课程中有一个免费点(,这是使用下面的语法,循环一个课程中的每个免费点),队列索引1的学生达到0并且他被接受进入课程。

  cmd.CommandText = "UPDATE [Register]  
                     SET QueueIndex = QueueIndex - 1,  
                     Accepted = IIF(QueueIndex = 1, 1, 0)  
                     WHERE QueueIndex > 0 AND CID = @cid;"; 

但是,如果该学生已被接受,我不知道如何改进此语法并实施检查程序。如果他已经是,那么他应该不被接受(并将他的队列索引设置为0,因此他不再排队,并且接受仍然是假的)并检查下一个学生。我不知道如何改进这种语法。

在db-table中,我使用CID(课程ID) SID(学生ID)接受(bool) ,选择(1-3门课程选择,这里不重要), QueueIndex(int)

我想实现某种..如果当前学生的QueueIndex = 1,并且他的/ SID选择/选择中的任何一个是Accepted = true THEN QueueIndex = 0和Accepted = false,那么当前的选择是不再相关,因为他已被接受。

1 个答案:

答案 0 :(得分:1)

您正在寻找以下内容吗?

UPDATE Register
SET QueueIndex=QueueIndex-1, Accepted=0
WHERE QueueIndex>0 
AND Accepted<>0
AND CID=@CID

如果是,这对我来说似乎有问题,因为现在接受的字段已更新为假,但该学生已经注册了一次,并且在第三次尝试中,将接受where子句接受学生。如果是这种情况,则应添加其他字段以涵盖所有可能的方案。我建议从键盘上退后一步,拿笔和纸,让你的逻辑正确。它会为你节省很多时间。如果不是这种情况,请忽略上述所有笔和纸部分!