我希望你能帮助我
我正在编写一个ASP.NET应用程序,我必须遍历数据表中的70,000多个数据行,以便更新数据库记录(每个数据表行都有更新数据库记录的信息)。 我的想法是将表分成10,000行表并创建一些异步方法来更新数据库(每个表一个异步方法)。 我需要确保表中的每条记录都是更新,因此所有内容都包含在TransacionScope块中。
问题是,当我运行Page.ExecuteRegisteredAsyncTasks()时,我收到一个Timeout异常,告诉我连接的最大允许时间已经完成。
我的代码如下
using (TransactionScope transaccion = new TransactionScope(TransactionScopeOption.RequiresNew, new TimeSpan(0, 120, 0)))
{
//Validando momentos
clConsultoraCompensationPlan.asignaValoresFinales(dtConsultoraCompensationPlan,
compensation_plan, usuario,pagina);
transaccion.Complete();
}
private static void asignaValoresFinales(DataTable dtConsultorasMaster, clCompensationPlan compensation_plan, int usuario,Page pagina)
{
List<DataTable> lista_tablas = new List<DataTable>();
//Separadno la tabla en 30 tablas
foreach(IEnumerable<DataRow> renglones in LinqExtensions.Split(dtConsultorasMaster.AsEnumerable(), 50))
{
lista_tablas.Add(renglones.CopyToDataTable());
}
foreach (DataTable dtConsultoraCompensationPlan in lista_tablas)
{
AsignaValoresFinalesAsincrono tarea = new AsignaValoresFinalesAsincrono();
PageAsyncTask tarea_asincrona = new PageAsyncTask(tarea.OnBegin, tarea.OnEnd, tarea.OnTimeout, new ContenedorAsignaValoresFinalesAsincrono(dtConsultoraCompensationPlan,compensation_plan,usuario), true);
pagina.RegisterAsyncTask(tarea_asincrona);
}
pagina.ExecuteRegisteredAsyncTasks();
}
为了运行查询我正在使用单例实例,这会影响某些事情吗? 是否有更好的方法来完成此任务而不是拆分表和多线程?
提前致谢
答案 0 :(得分:1)
这是您的更新中的超时问题。如果事务范围使用一个连接,那么您可能需要在命令或连接字符串中更新命令超时。