0
我希望你能幫助我如何使用事務中的多個線程更新數據庫項目?
我正在寫一個ASP.NET應用程序,我有循環超過70000個多數據行的DataTable中,以便更新數據庫記錄(每個DataTable行有信息更新數據庫記錄)。 我的想法是將表分成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();
}
爲了運行我使用的是單一實例查詢,這是否會影響什麼? 有沒有更好的方法來完成這個任務,而不是拆分表和多線程?
在此先感謝
交易超時設置爲2小時 我應該在連接字符串上添加 連接超時= 60 嗎? 我應該在命令中添加它嗎? –
Connection Timeout屬性指示連接應輪詢活動數據庫連接的時間。命令超時是不同的,因爲它決定了等待sql命令完成的時間。 –