0

我希望你能帮帮我

我正在编写一个 ASP.NET 应用程序,我必须在数据表中循环超过 70,000 个数据行才能更新数据库记录(每个数据表行都有更新数据库记录的信息)。我的想法是将表分解为 10,000 行表并创建一些异步方法来更新数据库(每个表一个异步方法)。我需要确保表上的每条记录都是更新的,因此所有内容都被包装到一个 TransacionScope 块中。

问题是,当我运行 Page.ExecuteRegisteredAsyncTasks() 时,我得到一个超时异常,告诉我获得连接的最大允许时间已经完成。

我的代码如下

 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();
}

为了运行我使用单例实例的查询,这会影响什么吗?有没有更好的方法来完成这个任务而不是拆分表和多线程?

提前致谢

4

1 回答 1

1

这是您更新中的超时问题。如果事务范围使用一个连接,那么您可能需要在命令或连接字符串中更新命令超时。

于 2013-08-25T02:19:26.920 回答