gpt4 book ai didi

c# - SQL 按顺序一次更新一项

转载 作者:太空狗 更新时间:2023-10-30 00:40:34 24 4
gpt4 key购买 nike

我有这个 c# 代码执行 SQL 更新,可以一次执行多个更新。现在我正在更新的表有一个名为 SortOrder 的列,所以在我进行这些多次更新时,我想按照 sortOrder 列的顺序进行更新......这甚至可能吗?

这是我的代码:

public void PostScheduledTasks(List<CellModel> cells)
{
conn = new SqlConnection(connectionString);
cmd = new SqlCommand(
@"UPDATE ScheduleTasks_Copy
SET
ActualStart=@actualStart,
ActualFinish=@actualFinish,
ActualEndDate=@actualEndDate,
UserDate1=@userDateOne,
IsCompleted=@isCompleted
WHERE ScheduleTaskID = @scheduleTaskID");
cmd.Parameters.Add("@isCompleted", System.Data.SqlDbType.Bit);
cmd.Parameters.Add("@userDateOne", System.Data.SqlDbType.DateTime);
cmd.Parameters.Add("@actualStart", System.Data.SqlDbType.DateTime);
cmd.Parameters.Add("@actualFinish", System.Data.SqlDbType.DateTime);
cmd.Parameters.Add("@actualEndDate", System.Data.SqlDbType.DateTime);
cmd.Parameters.Add("@scheduleTaskID", System.Data.SqlDbType.Int);


cmd.Connection = conn;

conn.Open();
for (int i = 0; i < cells.Count; i++)
{
cmd.Parameters["@isCompleted"].Value = cmd.Parameters["@percentComplete"].Value = (cells[i].selected == true) ? 1 : 0;
cmd.Parameters["@userDateOne"].Value = !string.IsNullOrEmpty(cells[i].scheduledDate) ? cells[i].scheduledDate : (object)DBNull.Value;
cmd.Parameters["@actualStart"].Value = !string.IsNullOrEmpty(cells[i].actualDate) ? cells[i].actualDate : (object)DBNull.Value;
cmd.Parameters["@actualFinish"].Value = !string.IsNullOrEmpty(cells[i].finishedDate) ? cells[i].finishedDate : (object)DBNull.Value;
cmd.Parameters["@actualEndDate"].Value = !string.IsNullOrEmpty(cells[i].finishedDate) ? cells[i].finishedDate : (object)DBNull.Value;
cmd.Parameters["@scheduleTaskID"].Value = cells[i].scheduleTaskID;
cmd.ExecuteNonQuery();
}

conn.Close();
}

最佳答案

如果可以从源对象“cells”中确定“SortOrder”,就像其他属性一样:

然后最有效的方法是在迭代之前按 SortOrder 对“单元格”进行排序。这样做的确切方法超出了问题的范围,因为您没有告诉我们“单元格”到底是什么(列表?数组?自定义对象?集合?)

如果排序顺序只能通过查询数据库来确定:

然后,毫不奇怪,您将需要查询数据库:

SELECT ScheduleTaskID, SortOrder FROM ScheduleTasks_Copy ORDER BY SortOrder

您遍历该行集,每次都获取 ScheduleTaskID。对于每个 ScheduleTaskID,循环访问“cells”,直到找到匹配的任务 (cells[i].scheduleTaskID == TaskID),然后使用匹配的任务更新数据库来自源表的任务。

这里是很粗略的代码,好久没写C#了:

using (connection)
{
SqlCommand command = new SqlCommand("SELECT ScheduleTaskID, SortOrder FROM ScheduleTasks_Copy ORDER BY SortOrder;", connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();

if (reader.HasRows)
{
while (reader.Read())
{
int taskid = reader.GetInt32(0);
for (int i = 0; i < cells.Count; i++)
{
if (cells[i].scheduleTaskID == taskid) {
cmd.Parameters["@isCompleted"].Value = cmd.Parameters["@percentComplete"].Value = (cells[i].selected == true) ? 1 : 0;
cmd.Parameters["@userDateOne"].Value = !string.IsNullOrEmpty(cells[i].scheduledDate) ? cells[i].scheduledDate : (object)DBNull.Value;
cmd.Parameters["@actualStart"].Value = !string.IsNullOrEmpty(cells[i].actualDate) ? cells[i].actualDate : (object)DBNull.Value;
cmd.Parameters["@actualFinish"].Value = !string.IsNullOrEmpty(cells[i].finishedDate) ? cells[i].finishedDate : (object)DBNull.Value;
cmd.Parameters["@actualEndDate"].Value = !string.IsNullOrEmpty(cells[i].finishedDate) ? cells[i].finishedDate : (object)DBNull.Value;
cmd.Parameters["@scheduleTaskID"].Value = cells[i].scheduleTaskID;
cmd.ExecuteNonQuery();
}
}
}
}
reader.Close();
}

关于c# - SQL 按顺序一次更新一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26509965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com