Как заставить SqlBulkCopy работать с библиотекой MS Enterprise?

У меня есть код, который использует SqlBulkCopy. И теперь мы рефакторим наш код, чтобы использовать функции базы данных Enterprise Library вместо стандартных. Вопрос в том, как я могу создать экземпляр SqlBulkCopy? Он принимает SqlConnection, а у меня только DbConnection.

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

person HiveHicks    schedule 28.07.2010    source источник


Ответы (1)


Очень просто, мы используем его так, и он отлично работает:

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

person Julien N    schedule 29.07.2010
comment
О, это действительно легко. Я думал об этом, но не пробовал. Вы пытались использовать TransactionScope с SqlBulkCopy? У меня есть что-то вроде: using (new TransactionScope()) { using (var connection = db.CreateConnection()) { using (var bulkCopy = new SqlBulkCopy((SqlConnection)connection) { /* blabla */ } } } и он выдает System.Transactions.TransactionManagerCommunicationException, говоря, что MSDTC отключен, хотя я включил его. - person HiveHicks; 29.07.2010
comment
Прошу прощения, но нет. Никогда не использовал TransactionScope. Мы используем параметр транзакции параметра SqlBulkCopy (последний параметр конструктора, null в приведенном выше примере) - person Julien N; 29.07.2010
comment
Если вам просто нужна транзакция для BulkCopy, вы можете изменить второй параметр с SqlBulkCopyOptions.Default на SqlBulkCopyOptions.UseInternalTransaction. См. msdn.microsoft.com/en-us/library. /tchktcdk%28VS.80%29.aspx - person Julien N; 29.07.2010