SqlBulkCopy導致SQL Server 2000上出現死鎖

.net asp.net sql sqlbulkcopy sql-server

我在.NET 3.5中有一個自定義數據導入可執行文件,SqlBulkCopy基本上可以更快地插入大量數據。該應用程序基本上採用輸入文件,按摩數據並批量上傳到SQL Server 2000.它是由一個使用SQL 2008數據庫環境構建它的顧問編寫的。這種環境差異會導致這種情況嗎? SQL 2000確實有bcp實用程序,這是BulkCopy所基於的。因此,當我們運行它時,它會觸發死鎖錯誤。

錯誤詳細信息:事務(進程ID 58)在鎖資源上與另一個進程死鎖,並被選為死鎖犧牲品。重新運行該交易。

我已嘗試過多種方法來嘗試解決它。比如臨時設置連接字符串變量MultipleActiveResultSets = true,這不是理想的,但它仍然會給出死鎖錯誤。我還確保它不是連接超時問題。

這是功能。任何建議?

/// <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;
    }

熱門答案

我終於能夠獲得我們的生產數據庫的本地副本(~50演出)來測試應用程序。事實證明,交易嚴重是一個環境問題。謝謝費拉斯。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因