我有这个c#代码执行SQL Update,可以一次执行多个更新.现在我正在更新的表有一个名为SortOrder的列,所以当我进行这些多次更新时,我想按sortOrder列的顺序进行更新……这是否可能?这是我的代码:public void PostSch...

我有这个c#代码执行SQL Update,可以一次执行多个更新.现在我正在更新的表有一个名为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对“单元格”进行排序.这样做的确切方法超出了问题的范围,因为你没有告诉我们究竟是什么“单元格”(一个列表?一个数组?一个自定义对象?一组?)
如果只能通过查询数据库来确定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按顺序一次更新一个项目


基础教程推荐
- 在Winform程序中使用Spire.Pdf实现页面添加印章功能的实现 2023-03-09
- C#使用Objects Comparer进行对象比较 2023-06-22
- unity实现QQ截图功能 2023-02-15
- C# 总结QueueUserWorkItem传参几种方式案例详解 2023-04-27
- C#中struct与class的区别详解 2023-06-15
- C#调用接口的四种方式介绍 2023-06-15
- c#中WinForm用OpencvSharp实现ROI区域提取的示例 2023-06-04
- C# WinForm实现自动更新程序之客户端的示例代码 2023-07-05
- C# Winform程序实现防止多开的方法总结【亲测】 2023-02-08
- C#中可枚举类型详解 2022-11-18