Как использовать SqlBulkCopy с SMO и транзакциями - PullRequest
2 голосов
/ 06 мая 2011

Я пытаюсь создать таблицу, используя SMO, и далее использовать объект SqlBulkCopy, чтобы вставить кучу данных в эту таблицу. Я могу сделать это без использования транзакции, как это: -

Server server = new Server(new ServerConnection(new SqlConnection(connectionString)));
var database = server.Databases["MyDatabase"];

using (SqlConnection connection = server.ConnectionContext.SqlConnectionObject)
{
    try
    {
        connection.Open();
        Table table = new Table(database, "MyNewTable");
        // --- Create the table and its columns --- //

        SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connection);
        sqlBulkCopy.DestinationTableName = "MyNewTable";
        sqlBulkCopy.WriteToServer(dataTable);
    }
    catch (Exception)
    {
        throw;
    }
}

По сути, я хочу выполнить вышеизложенное, используя объект SqlTransaction и фиксируя его, когда операция завершена (или откат, если он потерпит неудачу). Кто-нибудь может помочь?

1 Ответ

3 голосов
/ 06 мая 2011

2 вещи -

A - Метод SQLBulkCopy уже основан на транзакции по умолчанию .Это означает, что сама копия инкапсулируется в транзакцию и работает с ошибками как единое целое.

B - У объекта ServerConnection есть методы для StartTransaction, CommitTransaction, RollbackTransaction.

Вы должны быть в состоянии использовать эти методы в своем коде выше, но я подозреваю, что если при создании таблицы возникнет проблема, ваша try/catch справится с этим соответствующим образом.

...