繁体   English   中英

事务范围中的表适配器更新使超时保持超时

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM