如何使用SqlBulkCopy与SMO和事务

时间:2011-05-06 09:40:25

标签: c# sql smo

我正在尝试使用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 个答案:

答案 0 :(得分:3)

2件事 -

A - The SQLBulkCopy method is already transaction based by default。这意味着副本本身封装在一个事务中,并作为一个单元失败。

B - The ServerConnection object has methods for StartTransaction, CommitTransaction, RollbackTransaction.

您应该可以在上面的代码中使用这些方法,但我怀疑如果创建表格存在问题,try/catch会正确处理。