1

SQL サーバー テーブルに大量のレコードを挿入する際に問題が発生しました。SqlBulkCopy を使用してこの問題を解決します。これで、レコードをかなりすばやく挿入できるようになりました。

レコードの挿入中にトランザクションが失敗した場合、同じ操作を 3 回再試行する必要があるという質問があります。SqlBulkCopy で再試行ロジックを実現するにはどうすればよいですか?

using (var connection = DatabaseOperations.CreateConnection(ConnectString))
    {
        connection.Open();
        var transaction = connection.BeginTransaction();
        try
        {
            var dt = new DataTable();
            dt.Columns.Add("EmployeeID");
            dt.Columns.Add("Name"); 
            for (var i = 1; i < 1000000; i++)    
                dt.Rows.Add(i + 1, "Name " + i + 1);

            using (var sqlBulk = new SqlBulkCopy(connection,SqlBulkCopyOptions.Default, transaction as SqlTransaction))
            {
                sqlBulk.DestinationTableName = "Employees";
                sqlBulk.BatchSize = 100000;
                sqlBulk.WriteToServer(dt);
            }
        }
        catch (SqlException ex)
        {
            transaction.Rollback();
            throw new CustomException("SQL Exception", ex);
        }
        catch (Exception e)
        {
            transaction.Rollback();
            throw;
        }
        transaction.Commit();
    }
4

1 に答える 1