클라이언트에서 DB로 몇십만건의 데이타를 삽입할때면 INSERT 보다 빠른 방법이 없을까 고민을 하다 보니 답이 나오네요.
http://archive.msdn.microsoft.com/LinqEntityDataReader해보시면 그냥 INSERT 보다 몇배는 빠르고 쉽습니다.
static int SendOrders(int totalToSend)
{
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
using (SqlTransaction tran = con.BeginTransaction())
{
var newOrders =
from i in Enumerable.Range(0, totalToSend)
//삽입 될 테이블 형과 데이터가 같아야함.
select new Order
{
customer_name = "Customer " + i % 100,
quantity = i % 9,
order_id = i,
order_entry_date = DateTime.Now
};
SqlBulkCopy bc = new SqlBulkCopy(con,
SqlBulkCopyOptions.CheckConstraints |
SqlBulkCopyOptions.FireTriggers |
SqlBulkCopyOptions.KeepNulls, tran);
bc.BatchSize = 1000;
bc.DestinationTableName = "order_queue";
bc.WriteToServer(newOrders.AsDataReader());
tran.Commit();
}
con.Close();
}
return totalToSend;
}
AsDataReader가 위 주소에 받을 수 있는 확장 함수입니다.
c# 시간 측정 방법 (0) | 2011.11.04 |
---|---|
강제 형 변환(cast)보다는 as, is 연산자를 사용하는 것이 좋다 (0) | 2011.10.24 |
enum 의 flags 연산 (0) | 2011.06.14 |
TreeView 검색(재귀호출) (0) | 2011.05.16 |
byte[] 과 String 의 상호 변환 (0) | 2011.05.13 |