我有这个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按顺序一次更新一个项目
基础教程推荐
- C#实现简单的天气预报示例代码 2023-02-25
- Unity实现QQ列表折叠菜单 2023-02-16
- C#集合之可观察集合的用法 2023-05-31
- C# Winform调用百度接口实现人脸识别教程(附源码) 2023-02-17
- C# 9 中新加入的关键词 init,record,with 2023-03-10
- C#实现图表中鼠标移动并显示数据 2023-05-21
- C#实现抢红包算法的示例代码 2023-05-25
- Unity3D Shader实现贴图切换效果 2023-01-16
- C#排序算法之归并排序 2023-02-07
- 小白2分钟学会Visual Studio如何将引用包打包到NuGet上 2023-04-28