[英]Table adapter update in transaction scope keeps timing out
因此,我有一个类型化的数据集,该数据集是我从另一个数据库中创建记录的(超过500,000条记录!)。 我需要将所有这些记录导入另一个数据库,并具有以下代码(减去初始化,添加行等):
try
{
Console.WriteLine("Time to process of adding to table: Start at " + startDate.ToString() + " | End at " + DateTime.Now.ToString());
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew, new TimeSpan(1, 0, 0)))
{
laborTicketTableAdapter.Update(laborTicket);
ts.Complete();
}
Console.WriteLine("Time to process transaction: Start at " + startDate.ToString() + " | End at " + DateTime.Now.ToString());
}
catch (SqlException ex)
{
MessageBox.Show("Something bad happened" + Environment.NewLine + ex.StackTrace);
result = false;
}
catch (Exception ex)
{
MessageBox.Show("Something bad happened" + Environment.NewLine + ex.StackTrace);
result = false;
}
控制台输出以下内容:
Time to process of adding to table: Start at 1/1/2009 2:05:59 PM | End at 5/18/2011 2:06:30 PM
The thread '<No Name>' (0xa5c) has exited with code 0 (0x0).
The thread '<No Name>' (0x2e4) has exited with code 0 (0x0).
The thread '<No Name>' (0xae0) has exited with code 0 (0x0).
A first chance exception of type 'System.Transactions.TransactionAbortedException' occurred in System.Transactions.dll
它引发一个异常,内部异常是“事务超时”。 事务已过期,因此我将超时设置为一小时,但在15分钟以内仍然超时。 这是怎么回事?
最终处理时间为2:19:40 PM,运行大约需要15分钟。 我怎么会收到这个例外? 而且我在控制台上看到了三个线程,但这在否则为空的项目中是一片空白。 所有其他连接都与外部数据源关闭,而在执行更新时剩下的只是该表适配器和表对象。
-编辑-Machine.config没有为maxTimeout属性设置任何设置
造成异常的原因可能有多种。 也许您的实际SQL连接超时了? 当您的表需要重组时可能会发生这种情况(仅在此处推测)
作为sidenode,您是否看过SqlBulkCopy? ( http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlbulkcopy.aspx )->>使您可以有效地将SQL Server表中的数据与其他来源的数据一起批量加载。
以我的经验,这非常快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.