2010-07-28 16 views
4

我有一些使用SqlBulkCopy的代碼。現在我們正在重構我們的代碼,以使用企業庫數據庫功能而不是標準功能。問題是我如何實例化SqlBulkCopy?它接受SqlConnection,並且我只有DbConnection。如何讓SqlBulkCopy與MS企業庫協同工作?

var bulkCopy = new SqlBulkCopy(connection) // here connection is SqlConnection 
{ 
    BatchSize = Settings.Default.BulkInsertBatchSize, 
    NotifyAfter = 200, 
    DestinationTableName = "Contacts" 
}; 

回答

7

真的很容易,我們用它這樣的,它完美的作品:

using (DbConnection connection = db.CreateConnection()) 
{ 
    connection.Open(); 
    //blah blah 

    //we use SqlBulkCopy that is not in the Microsoft Data Access Layer Block. 
    using (SqlBulkCopy copy = new SqlBulkCopy((SqlConnection) connection, SqlBulkCopyOptions.Default, null)) 
    { 
     //init & write blah blah 
    } 
} 

該解決方案是投連接:(SqlConnection) connection

+1

哦,那是很容易的。我想過,但還沒有嘗試過。 您是否嘗試過使用TransactionScope和SqlBulkCopy? 我有一樣的東西: 使用(新的TransactionScope()){ 使用 (VAR連接= db.CreateConnection()){ 使用 (VAR bulkCopy =新SqlBulkCopy的((SqlConnection的)連接){/ *布拉布拉* /}} } 和它拋出System.Transactions.TransactionManagerCommunicationException說,MSDTC是關閉的,但我打開它。 – HiveHicks 2010-07-29 11:54:34

+0

都能跟得上抱歉。沒用過的TransactionScope。 我們使用SqlBulkCopy的參數的交易參數(上例中的構造函數的最後一個參數,'null') – 2010-07-29 12:00:52

+0

如果你只需要一個BulkCopy的事務,你可以通過將第二個參數從'SqlBulkCopyOptions.Default'轉換爲'SqlBulkCopyOptions.UseInternalTransaction'。請參閱http://msdn.microsoft.com/en-us/library/tchktcdk%28VS.80%29.aspx – 2010-07-29 12:03:04