SqlBulkCopy Имитация задержки - PullRequest
1 голос
/ 02 ноября 2011

Я хочу выполнить массовую загрузку данных в таблицу SQL 2008 с помощью SqlBulkCopy. Я планирую загружать данные параллельно от нескольких клиентов.

Однако я хочу смоделировать задержку при загрузке данных, чтобы я мог проверить наличие блокировок в базе данных и проверить наличие проблем параллелизма. Обычно я использую Thread.Sleep () для имитации длительного процесса, но я не уверен, работает ли он с SQLBulkCopy.

 using (SqlBulkCopy s = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.TableLock))
{


s.DestinationTableName = "HoldTable";    
s.WriteToServer(dataTable);    
System.Threading.Thread.Sleep(1000000);    
s.Close();
}

1 Ответ

0 голосов
/ 02 ноября 2011

По умолчанию SqlBulkCopy.WriteToServer выполняется вне транзакции. Это означает, что он снимет все блокировки до того, как вернется функция WriteToServer. Во время вашего Sleep.

не будет никаких блокировок базы данных.

Вы можете использовать транзакцию, указав третий параметр в SqlBulkCopy конструктор. См. эту статью MSDN для примеров .

Транзакция сохраняет свои блокировки, пока вы не подтвердите ее. Поэтому, если вы положите Sleep непосредственно перед коммитом, у вас должна быть полезная симуляция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...