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