在 C# 中使用 if 语句通过 UPDATE 更新特定行 (sql)
Update a specific row(sql) via UPDATE using if-statement in C#
如果课程已满,则下一位学生将排队,1,2,3 等。(0 = 不排队,boolean Accepted
为真,表示该学生在课程)。如果学生退出课程,课程将有一个空位 table。
但是,使用 C# 和 OleDbCommand
,一旦课程 table 有空位,我如何更新每个学生行?我希望每个学生在每个空闲位置都少获得 1 个值,如果在队列 #1 中的学生(即将到达队列 0),我希望它将 Accepted
布尔值更新为真(意味着学生在课程)。
我的问题:
我想将每个学生队列索引更新为每个空位的“--1”。
我不知道如何将队列索引为 1 的特定学生更改为布尔值 Accepted = true
,当学生即将到达队列索引 0 时。
我不知道该怎么做,因为我不知道如何正确组合数据库和 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;
希望对您有所帮助;
如果课程已满,则下一位学生将排队,1,2,3 等。(0 = 不排队,boolean Accepted
为真,表示该学生在课程)。如果学生退出课程,课程将有一个空位 table。
但是,使用 C# 和 OleDbCommand
,一旦课程 table 有空位,我如何更新每个学生行?我希望每个学生在每个空闲位置都少获得 1 个值,如果在队列 #1 中的学生(即将到达队列 0),我希望它将 Accepted
布尔值更新为真(意味着学生在课程)。
我的问题:
我想将每个学生队列索引更新为每个空位的“--1”。
我不知道如何将队列索引为 1 的特定学生更改为布尔值
Accepted = true
,当学生即将到达队列索引 0 时。
我不知道该怎么做,因为我不知道如何正确组合数据库和 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;
希望对您有所帮助;