LoginSignup
8
8

More than 5 years have passed since last update.

C#で Bulk Insert のサンプル

Last updated at Posted at 2015-01-28

C# で大量のデータをDatasetでインサートしようとすると遅くて使えないと思いSSISで処理を書いていた。
今更だがSqlBulkCopyを知ることができた。
下記コードはOracleからSQLServerへデータをインポートするサンプルであらかじめSQL Server Management Studioのインポート機能を使いOracleからテーブル情報のみ取得してSQL Serverにテーブルを作成してある。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Threading.Tasks;
using Oracle.DataAccess.Client;
using SampleBulkCopy.Properties;

namespace SampleBulkCopy
{
    class Program
    {
        static void ExecuteCopy(string tableName)
        {
            using (var connSrc = new
OracleConnection(Settings.Default.OracleConnectionString))
            using (var connDest = new
SqlConnection(Settings.Default.SqlConnectionString))
            {
                connSrc.Open();
                connDest.Open();

                var sql = string.Format("SELECT * FROM {0} ", tableName);
                var cmd = new OracleCommand(sql, connSrc);
                using (var rd = cmd.ExecuteReader())
                {

                    using (var bulk = new SqlBulkCopy(connDest))
                    {
                        bulk.BulkCopyTimeout = 10000;
                        bulk.DestinationTableName =
string.Format("dbo.{0}", tableName);
                        bulk.WriteToServer(rd);
                    }

                }

            }
        }

        static void Main(string[] args)
        {
            ExecuteCopy("TABLE");
        }
    }
}

DataRaderを渡すだけでInsert 出来るのは良い。
Oracleからテーブル情報を取得するさい、Date型がそのままDate型になるので、テーブル定義するさいDateをDateTimeに変換すると良い。

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8