У меня есть пользовательский исполняемый файл импорта данных в .NET 3.5, который SqlBulkCopy в основном делает более быстрые вставки на большие объемы данных. Приложение в основном принимает входной файл, массирует данные и загружает их в SQL Server 2000. Он был написан консультантом, который строит его с базой данных SQL 2008. Может ли это быть причиной этого? У SQL 2000 есть утилита bcp, на которой базируется BulkCopy. Итак, когда мы это запустили, это вызвало ошибку Deadlock.SqlBulkCopy вызывает deadlock на SQL Server 2000
Сведения об ошибке: Транзакция (идентификатор процесса 58) была заблокирована при блокировке ресурсов другим процессом и была выбрана в качестве жертвы взаимоблокировки. Перезапустите транзакцию.
Я пробовал множество способов решить проблему. например, временную установку переменной строки соединения MultipleActiveResultSets = true, которая не была идеальной, но она по-прежнему дает ошибку Deadlock. Я также убедился, что это не проблема с тайм-аутом соединения.
здесь функция. Любой совет?
/// <summary>
/// Bulks the insert.
/// </summary>
public void BulkInsert(string destinationTableName, DataTable dataTable)
{
SqlBulkCopy bulkCopy;
if (this.Transaction != null)
{
bulkCopy = new SqlBulkCopy
(
this.Connection,
SqlBulkCopyOptions.TableLock,
this.Transaction
);
}
else
{
bulkCopy = new SqlBulkCopy
(
this.Connection.ConnectionString,
SqlBulkCopyOptions.TableLock | SqlBulkCopyOptions.UseInternalTransaction
);
}
bulkCopy.ColumnMappings.Add("FeeScheduleID", "FeeScheduleID");
bulkCopy.ColumnMappings.Add("ProcedureID", "ProcedureID");
bulkCopy.ColumnMappings.Add("AltCode", "AltCode");
bulkCopy.ColumnMappings.Add("AltDescription", "AltDescription");
bulkCopy.ColumnMappings.Add("Fee", "Fee");
bulkCopy.ColumnMappings.Add("Discount", "Discount");
bulkCopy.ColumnMappings.Add("Comment", "Comment");
bulkCopy.ColumnMappings.Add("Description", "Description");
bulkCopy.BatchSize = dataTable.Rows.Count;
bulkCopy.DestinationTableName = destinationTableName;
bulkCopy.WriteToServer(dataTable);
bulkCopy = null;
}
Как насчет информации о тупике? См. Http://msdn.microsoft.com/en-us/library/ms190465.aspx о том, как его захватить. –