2010-02-08 1 views
1
에서 SQL 트랜잭션 방법을 만들어 내 프로젝트라는 데이터 세트의 항목에 추가 한

: 나는이 myDataSet.xsd 파일에 테이블을 드롭,이 후 을 myDataSet.xsd. 그게 다야. 내가 원하는 건 에서 Sql Transaction의 함수를 빌드하는 것입니다.이 데이터 집합은 어떻게 처리 할 수 ​​있습니까? SQL 또는 SqlTransaction 직접적인 관계가 없다 -Data.xsd

답변

2

DataSet는 인 - 메모리 구조이다.

나는 당신이 아마 SQL 트랜잭션을 사용하여 생성 된 TableAdapter 인스턴스에 대한 작업을 수행하기 위해 언급하는 것을 생각한다.

까다 롭습니다.

사힐 말리크 주제 (예, 그것은 정말 "대상"이다)에 primer 합리적으로 완전한 있습니다. 본질적으로 무엇을 모든 내부 SqlConnection를 열고이 열려 보유하고 다시 손을 당신이 정상적으로 사용하십시오 SqlTransactionBeginTransaction 방법으로 부분 클래스를 통해 TableAdapter을 확장하고 아래로 비등. 번거로우 시겠지만 모든 TableAdapter에 대해이 작업을 수행해야합니다. 또는 System.Transactions.TransactionScope을 사용할 수 있지만 DTC (분산 트랜잭션) 로의 승격을 피하기 위해 다양한 농구대를 뛰어 넘어야합니다.

내가 복사 오히려 나보다, 링크 된 기사에서 살펴보고 여기에 코드를 붙여하는 것이 좋습니다 것입니다.

TableAdapters이 많거나 일반적으로 단일 트랜잭션에서 두 개 이상을 결합해야하는 경우 Sahil의 방식은 너무 잘 확장되지 않습니다. 과거에는 (내가 여전히 TableAdapters을 사용했을 때) Ryan Whitaker's과 비슷한 방법을 사용했습니다. 이는 기본적으로 원숭이 패치입니다. 그것은 대부분의 무거운 짐을 들어 Reflection을 사용합니다.

은 그 두 TableAdapter 코드는 트랜잭션 안전 만들기에 결정적인 자원의 종류입니다. 개인적으로, 나는 더 이상 타입이없는 DataSet을 사용하지 않을 것입니다. Linq to SQL과 EF가 주위에 있고, 훨씬 강력하고, 지연된 실행을 가지며, 인 메모리 구조에 독점적으로 의존하지 않고, 테이블 데이터 게이트웨이 + 작업 단위 패턴을 사용하는 것은 매우 쉽습니다. 거래와 협력하는 것. 내 경험에 비추어 볼 때 이들이 충분하지 않다면 보통 DataSet이 될 것이고 나는 SqlCommand 인스턴스로 떨어 뜨려야합니다. 그러나 어떤 이유로 데이터 액세스에 반드시 DataSet을 사용해야하는 경우 위에서 언급 한 두 가지 방법 중 하나를 사용해야합니다.

+0

감사합니다. 친구, 정말 잘했다. (나는 TableAdapters를 의미했다) – Cmptrb