ADO.NETとトランザクションを使用して簡単な再試行ロジックを実装しようとしています。 コードのサンプル:ADO.NETによる1つのSQL接続内でのトランザクションの再試行
using(SqlConnection conn = new SqlConnection(m_connection))
{
conn.Open();
bool committed = false;
Exception exception = null;
for (int i = 0; i < s_attempts; i++)
{
SqlTransaction tran = conn.BeginTransaction();
try
{
// different commands here..
tran.Commit();
committed = true;
break;
}
catch (Exception ex)
{
exception = ex;
tran.Rollback();
}
}
if (!committed && exception != null)
{
throw exception;
}
}
それは前回の1がロールバックされた後に1つの接続内で別のトランザクションを作成しても大丈夫ですか?
ありがとうございます!
@Anderi、目的にもよりますが、あるトランザクションが別のトランザクションに依存している場合、それらの2つのトランザクションは単一コミットでなければなりません。 –
@HameedSyed、tryセクションで毎回同じロジックを呼びたいと思います。ときどきクラッシュし(デッドロックなど)、既に完了したロールバックを行い、新しいトランザクションで同じコマンドを再試行します。あなたの答えから私が理解するように、私はそれを行うことができます。ありがとうございました! –