ADO.NET SqlCommand オブジェクトを作成し、データベース (SQL Server 2005) に保存されるアイテムのリストをループする小さな C# メソッドを "継承" しました。
現在、従来の SqlConnection/SqlCommand アプローチが使用されており、すべてが機能することを確認するために、2 つの手順 (古いエントリを削除してから新しいエントリを挿入する) が ADO.NET SqlTransaction にラップされています。
using (SqlConnection _con = new SqlConnection(_connectionString))
{
using (SqlTransaction _tran = _con.BeginTransaction())
{
try
{
SqlCommand _deleteOld = new SqlCommand(......., _con);
_deleteOld.Transaction = _tran;
_deleteOld.Parameters.AddWithValue("@ID", 5);
_con.Open();
_deleteOld.ExecuteNonQuery();
SqlCommand _insertCmd = new SqlCommand(......, _con);
_insertCmd.Transaction = _tran;
// add parameters to _insertCmd
foreach (Item item in listOfItem)
{
_insertCmd.ExecuteNonQuery();
}
_tran.Commit();
_con.Close();
}
catch (Exception ex)
{
// log exception
_tran.Rollback();
throw;
}
}
}
さて、私は最近 .NET TransactionScope クラスについて多くのことを読んでいて、ここでどのようなアプローチが望ましいのか疑問に思っていました。使用に切り替えることで何か(読みやすさ、速度、信頼性)が得られますか
using (TransactionScope _scope = new TransactionScope())
{
using (SqlConnection _con = new SqlConnection(_connectionString))
{
....
}
_scope.Complete();
}
あなたは何を好みますか、そしてその理由は何ですか?
マルク