資料大量匯入 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);
這是看進度用
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);
這是看進度用
留言
張貼留言