Обновление адаптера таблицы в области транзакции задерживает время ожидания - PullRequest
0 голосов
/ 18 мая 2011

Итак, у меня есть типизированный набор данных, для которого я создал записи из другой базы данных (более 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 минут. Что происходит?

Конечное время обработки было 14:19:40, потребовалось около 15 минут. Почему я получаю это исключение? И я вижу три потока на консоли, но это пустой лист в другом пустом проекте. Все остальные соединения закрыты для внешних источников данных, и все, что остается, когда я делаю обновление, это тот адаптер таблицы и объект таблицы.

- РЕДАКТИРОВАТЬ - Machine.config не имеет настроек для атрибута maxTimeout

1 Ответ

0 голосов
/ 18 мая 2011

Причины могут быть разными. Может быть, у вашего реального соединения SQL был тайм-аут? это может произойти, когда ваша таблица нуждается в реорганизации (просто рассуждения здесь)

Как sidenode, вы взглянули на SqlBulkCopy? (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx) - >> Обеспечивает эффективную массовую загрузку таблицы SQL Server с данными из другого источника.

По моему опыту, это невероятно быстро.

...