資料大量匯入 SqlBulkCopy

目的是將 Access 資料庫匯入 SQL
1.開啟 .mdb
        string cnstr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Database);
            OleDbConnection Mdbicn = new OleDbConnection();
            Mdbicn.ConnectionString = cnstr;
            if (Mdbicn.State == ConnectionState.Open) Mdbicn.Close();
            Mdbicn.Open();
2.匯入到  DataTable
           string sql = "select * from " + Tname;
            OleDbDataAdapter da = new OleDbDataAdapter(sql, Mdbicn);
            DataTable Adt = new DataTable();
            da.Fill(Adt);

3.重點是如何弄進 SQL
   DataTable 有合併功能...但是不會寫入SQL
  以前是一筆一筆寫進去
  現在則有  SqlBulkCopy 這咚咚
  簡單易用而且又快
 //用法
     SqlConnection Bulkcn = new SqlConnection(IO_Lib.Sql_Connect_Str);
            Bulkcn.Open();//先開sql connect
            SqlBulkCopy sqlBC = new SqlBulkCopy(Bulkcn);//建一個

//設定要寫入SQL的哪張資料表
            sqlBC.DestinationTableName = Tname;
           //開始寫入
            try
            {
                sqlBC.WriteToServer(Adt);
                return true;
            }
            catch (Exception ex)
            {
                IO_Lib.Cati_log(sqlBC.DestinationTableName+":" + ex.Message, "SqlBulkCopy_ERR");
                return false;
            }
這樣就完成了.
其他功能
因為我是同樣欄位匯入如果是不同欄位
寫入前
//設定你要複製過去的DataTable的每個欄位要對應到目的地的哪個欄位
 sqlBC.ColumnMappings.Add("DataTable的欄位A", "資料庫裡的資料表的的欄位A");
//另外還有一些額外控制選項
   //設定一個批次量寫入多少筆資料
            //sqlBC.BatchSize = 1000;
    //設定逾時的秒數
            sqlBC.BulkCopyTimeout = 60;
   //設定 NotifyAfter 屬性,以便在每複製 10000 個資料列至資料表後,呼叫事件處理常式。
   //sqlBC.NotifyAfter = 10000;
    //sqlBC.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
這是看進度用








留言

熱門文章