2011-11-25 3 views
2
을 통해 SQL Server 2008에 여러 번 삽입

데이터 컬렉션이 있습니다. 이 레코드를 SQL Server 2008에 삽입해야합니다. 또한 트랜잭션을 유지 관리해야하므로 한 삽입이 실패하면 모든 변경 내용을 롤백해야합니다.Ado.Net 3.5 및 C#

이렇게하는 것이 가장 좋은 방법이 있습니까? 나는 닷넷 3.5를 사용한다.

답변

1

TransactionScope 및 System.Transactions에 대한 정보를 모두 읽으십시오.

+0

나는 내 컬렉션에 약 300 항목이있다. DB에 300 건의 통화를해야하는데 모두 Transaction Scope입니다. 이런 식으로 진행할 수 있습니까? 우르 의견? – Muthukumar

+1

예, 가능합니다. 효과가있을 것입니다. 당신의 취향에 맞추기가 너무 느리다면 대량 메커니즘을 고려할 수 있습니다. 일반적으로 300 개 항목에 대해 문제가되지는 않습니다 (한 번에 300 개의 항목을 삽입하지 않는 한 ...). – zmbq

+0

우르르 제안에 감사드립니다. – Muthukumar

1

wheather에 따라 ADO.NET/plain SQL을 사용하는 경우 bulk 삽입을 사용하거나 Linq-to-SQL을 사용하는 경우 LINQ Entity Data Reader을 사용하여 대량의 데이터를 한 번에 삽입 할 수 있습니다.

대량 삽입을 사용하면 각 배치가 하나의 트랜잭션으로 서버에 복사됩니다. 이 작업이 실패하면 SQL Server는 모든 일괄 처리에 대한 트랜잭션을 커밋하거나 롤백합니다.

4

SqlConnection 오브젝트의 BeginTransaction 메소드를 사용하여 트랜잭션을 생성해야합니다. 추적해야하는 SqlTransaction 개체가 반환됩니다.

모든 항목이 데이터베이스에 성공적으로 삽입되면 트랜잭션 개체에 대해 커밋을 호출합니다.

처리 중에 예외가 발생하면 트랜잭션 개체에서 롤백을 호출해야합니다.

대략적으로 말하자면, 코드는 다음과 같습니다

SqlConnection conn; 
// Create and open your connection here 

SqlTransaction trans = conn.BeginTransaction(); 
try { 
    // Perform your inserts 

    trans.Commit(); 
} catch(Exception ex) { 
    trans.Rollback(); 

    // Report the exception 
}