0

重複の可能性:
.net でのトランザクション

C# 言語を使用した .net のトランザクションについて知りたかっただけです。私はネット上のさまざまな記事を調べました。しかし、トランザクションについては理論的には知っていましたが、リアルタイムで正確な使用法を知りたいと思っていました。たとえば、いつリアルタイムでトランザクションを使用する必要がありますか。リンクのクリックイベントで何らかのアクションを実行するコードを書いているとしましょう。たとえば、いくつかの値を取得するために SQL 接続にアクセスしているとします。そこでトランザクションを使用する必要がありますか?SQL接続を使用せずに値をフェッチする単純なコードを書いている場合、そこでトランザクションを使用する必要がありますか? トランザクションを使用することの長所と短所は何ですか。理論的な知識を得ることは別ですが、その正確な使い方を知りたいです。使う時使わない時。単純なコードでトランザクションを使用できますか? トランザクションに関する基本的なことでも、応答やリンクは大歓迎です。

4

6 に答える 6

3

いくつかの値を取得するためにSQL接続をヒットしています。そこでトランザクションを使用する必要がありますか?

いいえ、データベース内のデータを変更しない場合は、トランザクションを使用する必要はありません。

トランザクションを使用することの長所と短所は何ですか。

あなたが言ったように、あなたは様々な記事を学びました、それであなたはトランザクションを使う理由を理解したかもしれません。データベースに関してこれらすべてを見てください。

スケーラブルで堅牢なアプリケーションの作成における3層アプリケーションの利点は、トランザクション処理システムによって実現可能になります。そのアーキテクチャ用に明示的に開発する必要なしに、アプリケーションを構成するコンポーネントを別々のサーバーに分散できることは、トランザクションサーバー処理のもう1つの利点です。トランザクション処理システムは、トランザクションがアトミックで、一貫性があり、分離され、耐久性があることも保証します。これにより、開発者はこれらの特性を明示的にサポートする必要がなくなります。

なぜトランザクション処理が必要なのですか?
トランザクション処理の利点  

トランザクションは単純なコードで使用できますか?

はい、ADO.Netを使用してC#でコードを記述できます。(例:SQLTransactionクラス)

例えば

SqlConnection db = new SqlConnection("connstringhere");
      SqlTransaction transaction;

      db.Open();
      transaction = db.BeginTransaction();
      try 
      {
         new SqlCommand("INSERT INTO TransactionDemo " +
            "(Text) VALUES ('Row1');", db, transaction)
            .ExecuteNonQuery();
         new SqlCommand("INSERT INTO TransactionDemo " +
            "(Text) VALUES ('Row2');", db, transaction)
            .ExecuteNonQuery();
         new SqlCommand("INSERT INTO CrashMeNow VALUES " +
            "('Die', 'Die', 'Die');", db, transaction)
            .ExecuteNonQuery();
         transaction.Commit();

参照:
ADO.NET.NET2.0
トランザクションモデルを使用したトランザクションの実行

于 2012-11-07T11:06:57.033 に答える
0

この記事を参照してください:

http://www.codeproject.com/Articles/10223/Using-Transactions-in-ADO-NET

これにより、トランザクションに関する質問に答えることができます。

于 2012-11-07T11:04:22.870 に答える
0

一般的に、ほとんどの人が示唆しているように、おそらく を使用する必要がありますがTransactionScope、これには注意すべき点がいくつかあります。

using(TransactionScope ts = TransactionUtils.CreateTransactionScope()){
  using(SqlConnection conn = new SqlConnection(connString)){
    conn.Open();
    using(SqlCommand cmd = new SqlCommand("DELETE FROM tableName WHERE somethingorother", conn)){
    cmd....

    }
    using(SqlCommand cmd ....) ...
    thingy.Save();//uses another command/connection possibly
   }

//all above Sql Calls will be done at this point. all or nothing
  ts.Complete();
}

使用方法 (および使用している DB/バージョン)TransactionScopeによっては、トランザクションを MSDTC にエスカレートする場合があります。これには、アプリを実行しているマシンでのセットアップが必要です (実行プロンプトからの dcomcnfg)。(一部のマシンでは、TransactionScope が自動的に MSDTC にエスカレートしますか? )

new TransactionScope() を空白で使用するのではなく、このhttp://blogs.msdn.com/b/dbrowne/archive/2010/06/03/using-new-transactionscope-considered-harmful.aspxを読む価値もあります -その記事では、静的メソッドを作成して、より役立つデフォルトを生成することを提案しています。

public class TransactionUtils {
  public static TransactionScope CreateTransactionScope()
  {
    var transactionOptions = new TransactionOptions();
    transactionOptions.IsolationLevel = IsolationLevel.ReadCommitted;
    transactionOptions.Timeout = TransactionManager.MaximumTimeout;
    return new TransactionScope(TransactionScopeOption.Required, transactionOptions);
  }
}

h番目

于 2012-11-07T11:30:08.207 に答える
0

トランザクションの使用はビジネス ルールに依存していると言えます。

技術的には、システム上のデータを変更 (更新、削除、挿入) する場合にのみ、トランザクションを使用できます。ソースから値を取得するだけで、データが変更/生成されないことを 100% 確信している場合は、この手順をトランザクションの一部として含めないでください。

簡単にするために、次のシナリオのいずれかに「はい」と答えた場合は、トランザクションを使用します。

a) クリックで複数のテーブルに影響を与えます。

b) クリックで複数のシステムに影響を与えます。これには、異なるサーバーにあるデータベースが含まれます。同じサーバーに 2 つの異なるインスタンスがある場合でも、異なるシステムとしてカウントされます。Web サービスの呼び出しも別のシステムとしてカウントされます。

c)次のようなシナリオを用意します。「ステップaを実行し、ステップbを実行し、すべてがOKの場合はOKを返します。そうでない場合はステップbを元に戻し、ステップaを元に戻してからエラーを返します」.

次に、実際にトランザクションを使用する方法について説明します。モデルで 1 つのデータベースのみを使用している場合は、ADO.NET トランザクション モデルを使用してください。 http://adotutorial.blogspot.de/2008/11/transaction-management-in-adonet.html

ただし、同じサーバーでデータベースの異なるインスタンスを呼び出している場合、または異なるテクノロジ (SQL、Oracle、Web サービス) を混在させている場合、トランザクション管理は 1000 倍の苦痛を伴います。次に、トランザクションスコープを使用して、少し簡単にする必要があります。.NET 2.0 の C# には、TransactionScope があります。これは、トランザクションの管理を支援するためにランタイムに指示できる方法です。

このチュートリアルを確認してください。役立つ場合があります。 http://codingcramp.blogspot.de/2009/06/how-to-setup-and-use-transactionscope.html

Microsoft テクノロジを使用していて、同じコンピューターで作業している場合、コードは正常に実行されます。ただし、ネットワーク環境で実行している場合、または異なるベンダーが混在している場合は、「トランザクション モニター」と呼ばれる別の重要なコンポーネントが関与します。その場合は、Microsoft DTC がトランザクションの調整に使用されるデフォルトの選択になるため、環境で Microsoft DTC が有効になっているかどうかを確認する必要があります。

于 2012-11-07T12:17:12.823 に答える
0

トランザクションの使用に真剣に取り組んでいる場合はTransactionScope、.NET のクラスに関する記事も読むことができます。この方法でトランザクションを実装するのは非常に簡単です。

http://simpleverse.wordpress.com/2008/08/05/using-transactionscope-for-handling-transactions/

例:

using ( var transaction = new TransactionScope() )
{
     // My Database Operations. It doesn't matter what database Type

     transaction.Complete();
}
于 2012-11-07T11:11:32.410 に答える
0

トランザクションの本質は、1 つのプロセスを表す 1 つ以上の変更がデータベースに一度取得され、そのうちの 1 つが失敗した場合、他の変更が元に戻されるようにすることです。ある銀行口座から別の銀行口座に送金する場合、一方の口座からの引き落としと他方の口座への入金が完全に成功する必要があります。そうしないと、輸送中にお金が失われます

using(SqlConnection conn = new SqlConnection())
{
   try
   {
    conn.Open();
    SqlTransaction tran = conn.BeginTransaction();

    //command to remove from account A
    //command to deposit into account B

    tran.Commit(); //both are successful
   }
   catch(Exception ex)
   {
      //if error occurred, reverse all actions. By this, your data consistent and correct
      tran.Rollback();
   }
}

別の代替手段はTransactionScopeSystem.Transactionsです

于 2012-11-07T11:14:44.013 に答える