2011-01-22 5 views
2

SQLストアドプロシージャを使用しています。 私はC#で書かれたいくつかのストアドプロシージャコールを持っています。私はトランザクションの中でそれらを包み込みたい:ストアドプロシージャへのトランザクションを作成するにはC#

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

それを行う方法はありますか?

更新: 私はエンタープライズライブラリを使用しています。 sp1Call()への例:

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

私はエンタープライズライブラリを使用しています。アップデートをご覧ください。 – Naor

答えて

4

あなたはSqlTransactionをチェックアウトしたいと思うでしょう。

+0

更新を参照してください。あなたは例を挙げることができますか? – Naor

+1

私はMicrosoft.Practicesライブラリに精通していませんが、ドキュメントをすばやく参照すると、代わりに 'TransactionScope'(http://msdn.microsoft.com/en-us/library/h5w5se33)が必要になるようです。 –

+0

エンタープライズライブラリフレームワークでこれを行う方法が見つかりません。 – 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

なぜこれのためにストアドプロシージャ自体を変更する必要がありますか? – BrokenGlass

+0

私はストアドプロシージャの呼び出しを変更する必要があります。 – Naor

関連する問題