C# 在C中使用if语句通过Update更新特定行(sql)#

C# 在C中使用if语句通过Update更新特定行(sql)#,c#,sql,asp.net,oledb,C#,Sql,Asp.net,Oledb,如果课程已满,下一个学生将排队,1、2、3等。。(0=不一致,布尔值已接受为真,表示学生在课程中)。如果学生退学,课程表中将有一个空位 然而,使用C#和OleDbCommand,一旦课程表有空闲点,我如何更新每个学生行?我希望每个学生在每个空闲点少得到1个值,如果学生在队列#1中(即将进入队列0),我希望它将接受的布尔值更新为true(意味着学生在课程中) 我的问题是: 我想为每个空闲点将每个学生队列索引更新为“-1” 我不知道如何将队列索引为1的特定学生更改为booleanAccepted=t

如果课程已满,下一个学生将排队,1、2、3等。。(0=不一致,布尔值
已接受
为真,表示学生在课程中)。如果学生退学,课程表中将有一个空位

然而,使用C#和
OleDbCommand
,一旦课程表有空闲点,我如何更新每个学生行?我希望每个学生在每个空闲点少得到1个值,如果学生在队列#1中(即将进入队列0),我希望它将
接受的
布尔值更新为true(意味着学生在课程中)

我的问题是:

  • 我想为每个空闲点将每个学生队列索引更新为“-1”

  • 我不知道如何将队列索引为1的特定学生更改为boolean
    Accepted=true
    ,此时该学生即将访问队列索引0

  • 我不知道如何做到这一点,因为我不知道如何正确地组合db和C

    这就是我能走多远:

    在下面的第一个代码中,我通过SELECT和reader计算了课程中的自由点数量

    //-----------------------------   
    //SELECT..... WHERE FreeSpots > 0...
    int = QueueCount = 0;
    
    while (reader.Read()) {
        QueueCount = ++QueueCount;
    };     
    
    //----------------------------
    OleDbConnection conn = new OleDbConnection();
    conn.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
    conn.Open();
    
    OleDbCommand cmd = new OleDbCommand();
    
    cmd.CommandText = "UPDATE [Course_Student] SET QueueIndex = @queueindex, Accepted = @accepted WHERE QueueIndex > 0 AND CID = " + CourseID + ";";
    
    cmd.Connection = conn;
    
    while (QueueCount > 0) {
        if (/*HELP: how do I check specific student with QueueIndex = 1?*/ == 1)
        {
            var pAccepted = new OleDbParameter("@accepted", SqlDbType.Bit);
            pAccepted.Value = true;
            cmd.Parameters.Add(pAccepted);
        } else {
            var pAccepted = new OleDbParameter("@accepted", SqlDbType.Bit);
            pAccepted.Value = false;
            cmd.Parameters.Add(pAccepted);
        }
    
        var pQueueIndex = new OleDbParameter("@queueindex", SqlDbType.Int);
        pQueueIndex.Value = /*HELP: for every row, --x QueueIndex for every students in queue*/;
        cmd.Parameters.Add(pQueueIndex);
    
        FreeSpot = --FreeSpot; //for later, to update freespots in course-table
    
        cmd.ExecuteNonQuery();
    }
    

    换句话说,我如何在C#中使用
    OleDBCommand
    或其他方法检查更新前的特定值?是否有类似的
    Read.Reader
    方法?我可以在哪里检查每一行?老实说,我在这里完全迷路了

    更改您的sql语句:

    UPDATE [Course_Student] 
    SET QueueIndex = QueueIndex - 1, 
        Accepted = (CASE QueueIndex WHEN 1 THEN 1 ELSE 0 END)
    WHERE QueueIndex > 0 AND CID = @CourseID;
    

    希望这能有所帮助

    确保在查询中使用参数-您正在使用一些参数,但是
    CourseID
    仍然与SQL连接在一起-不要这样做!还要为
    CourseID
    使用一个参数!Aah很高兴知道,可以:)我收到这个错误消息:查询表达式中的语法错误(缺少运算符)(CASE QueueIndex WHEN 1 THEN 1 ELSE 0 END)。浏览器指向cmd.ExecuteNonQuery();我刚刚用你的替换了CommandText,还有什么我要做的吗?哦,我想出来了,我使用Access db,它不支持大小写,取而代之的是我必须使用IFF(开关也可以工作),非常类似:
    UPDATE[Course\u Student]SET QueueIndex=QueueIndex-1,Accepted=IIF(QueueIndex=1,1,0)其中QueueIndex>0,CID=@CourseID谢谢,没有你的帮助我是不会明白的。编辑:baah无法换行,尝试使用2个空格+
    ,pre等。opps……睡过头→_→...但很高兴听到你这么说,我以前不知道access中的iif声明,谢谢你告诉我(^ω^)