상세 컨텐츠

본문 제목

SqlBulkCopy

C#

by 탑~! 2011. 10. 22. 19:51

본문

클라이언트에서 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#' 카테고리의 다른 글

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

관련글 더보기