SQLServer2005 バルクコピー

メモ。
でかいサイズのデータを高速コピー。
http://msdn2.microsoft.com/ja-jp/library/7ek5da1a(VS.80).aspx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Transactions;
using System.Data.Sql;
using System.Data.SqlClient;

namespace BulkCopy
{
    class Program
    {
        static void Main(string[] args)
        {
            //Exec_Datatable();
            Exec_Datareader();
        }

        static void Exec_Datareader()
        {
                var con = new SqlConnection(@"Data Source=xxx\sqlexpress;Initial Catalog=LockTest;Integrated Security=True");
                con.Open();
                var cmd = new SqlCommand("select * from tb2", con);
                var dr = cmd.ExecuteReader();

                var sbc = new SqlBulkCopy("Data Source=xxx;Initial Catalog=Test;Integrated Security=True");

                sbc.DestinationTableName = "tb0";

                sbc.ColumnMappings.Add(
                    new SqlBulkCopyColumnMapping(
                        "cd_",
                        "cd"));
                sbc.ColumnMappings.Add(
                    new SqlBulkCopyColumnMapping(
                        "data1_",
                        "data1"));
                sbc.ColumnMappings.Add(
                    new SqlBulkCopyColumnMapping(
                        "data2_",
                        "data2"));

                sbc.WriteToServer(dr);
        }

        static void Exec_Datatable()
        {
            using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew))
            {
                var da = new LocktestTableAdapters.tb2TableAdapter();
                var dt = da.GetData();
                var sbc = new SqlBulkCopy("Data Source=xxx;Initial Catalog=Test;Integrated Security=True");

                sbc.DestinationTableName = "tb0";

                sbc.ColumnMappings.Add(
                    new SqlBulkCopyColumnMapping(
                        "cd_",
                        "cd"));
                sbc.ColumnMappings.Add(
                    new SqlBulkCopyColumnMapping(
                        "data1_",
                        "data1"));
                sbc.ColumnMappings.Add(
                    new SqlBulkCopyColumnMapping(
                        "data2_",
                        "data2"));

                sbc.WriteToServer(dt);

                scope.Complete();
            }
        }
    }
}