2011-01-22 2 views
2

에서 호출합니다. SQL Server에 저장 프로 시저를 사용하고 있습니다. C#으로 작성된 여러 저장 프로 시저 호출이 있습니다. 거래 내에서 포장하고 싶습니다.저장 프로 시저 호출에 대한 트랜잭션을 C#

//Begin Transaction here 
sp1Call(); 
sp2Call(); 
sp3Call(); 
//Commit here 
//Rollback if failed 

어떤 방법이 있습니까?

업데이트 : 엔터프라이즈 라이브러리를 사용하고 있습니다. sp1Call()에 예 : 당신은 SqlTransaction을 체크 아웃 할 수 있습니다

public static void sp1Call(string itemName) 
    { 
     DbCommand command = db.GetStoredProcCommand("dbo.sp1_insertItem"); 
     db.AddInParameter(command, "@item_name", DbType.String, itemName); 
     db.ExecuteNonQuery(command); 
    } 
+2

어떻게 당신이 당신의 프로 시저를 호출합니까? 어떤 클라이언트 API를 사용합니까? – alexn

+0

Enterprise 라이브러리를 사용하고 있습니다. 업데이트를 참조하십시오. – Naor

답변

4

.

+0

업데이트를 참조하십시오. 예를 들어 줄 수 있습니까? – Naor

+1

필자는 Microsoft.Practices 라이브러리에 익숙하지 않지만 설명서를 빨리 ​​탐색하면 대신 'TransactionScope' (http://msdn.microsoft.com/en-us/library/h5w5se33)가 필요합니다. –

+0

Enterprise Library 프레임 워크에서이를 수행 할 수있는 방법을 찾을 수 없습니다. – Naor

2

그냥 빠른 검색은 DBTransaction와 함께 제공 :

using (DbConnection connection = db.CreateConnection()) 
    { 
    connection.Open(); 
    DbTransaction transaction = connection.BeginTransaction(); 
    try 
    { 
     DbCommand command = db.GetStoredProcCommand("dbo.sp1_insertItem"); 
     db.AddInParameter(command, "@item_name", DbType.String, itemName); 
     db.ExecuteNonQuery(command, transaction); 
     transaction.Commit();     
    } 
    catch 
    { 
     //Roll back the transaction. 
     transaction.Rollback(); 
    } 
    } 
+0

엔터프라이즈 라이브러리를 사용하고 있습니다. 나는 100 개 이상의 저장 프로 시저를 가지고있다. 각자를 당신의 형식으로 바꿀 수는 없습니다. – Naor

+0

왜 이렇게 저장된 proc를 변경해야합니까? – BrokenGlass

+0

저장 프로 시저에 대한 호출을 변경해야합니다. – Naor