現在オフラインです。再接続するためにインターネットの接続を待っています

方法: による分散トランザクションの実行をします。NET ServicedComponent Visual C# を使用してプロバイダーです。NET

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:316247
マイクロソフトの Visual Basic では。この資料のバージョンを NET を参照してください。 316627.

この資料には、次のマイクロソフトを指します。NET Framework クラス ライブラリの名前空間。
  • System.Data.SqlClient
  • System.EnterpriseServices
  • System.Runtime.CompilerServices
  • System.Reflection

このタスクで

概要
この資料でを使用して分散トランザクションを実行する方法について説明をします。NET のプロバイダーには、 ServicedComponent クラスです。この資料では、SqlClient を使用がします。NET のプロバイダー Microsoft SQL Server サーバーに対して ODBC または OLE DB を使用することもできます。NET マネージ プロバイダーです。

back to the top

要件

推奨されるハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および必要な service pack を以下に示します。
  • Microsoft Windows 2000 Professional、Microsoft Windows 2000 Server、Microsoft Windows 2000 の高度なサーバー
  • マイクロソフトの Visual Studio。NET
  • Microsoft SQL Server 7.0 または 2000年の Microsoft SQL Server
back to the top

概要

インスタンスにします。これを行うには、クラスを作成した場合は NET Framework クラスを自動トランザクションに参加できます。クラスのインスタンスまたはオブジェクトにアクセスする各リソースは、トランザクションに参加します。たとえば、ADO オブジェクトを使用している場合。マネーのアカウント データベースで、データベースのリソース マネージャーを投稿するのには、NET、オブジェクトでトランザクションを実行するかどうかを決定します。オブジェクトがトランザクションで実行する必要がある場合は、データベース トランザクションに自動的にリソース マネージャーを参加させます。

クラスを自動トランザクションに参加して準備するのには、次の手順を使用します。
  1. 適用、 TransactionAttribute コンポーネントの要求、自動トランザクションのタイプを指定するクラスに関連付けます。

    トランザクションの種類がのメンバーである必要があります、 TransactionOption 列挙値です。
  2. クラスからの派生は、 ServicedComponent クラスです。 ServicedComponent COM + サービスを使用するすべてのクラスの基本クラスです。
  3. アセンブリには、一意のキーのペアが含まれているかどうかを確認するのには、アセンブリに厳密な名前で署名します。
  4. クラスを COM + カタログに格納するアセンブリを登録します。

    メモ: クラスのインスタンスを呼び出すクライアントが共通言語ランタイムによって管理する場合は、登録は自動的に実行されます。だけアンマネージの呼び出し元を作成し、クラスのインスタンスを呼び出す場合はこの手順が必要です。使用して、します。NET サービス インストール ツール (Regsvcs.exe) にアセンブリを手動で登録します。
厳密な名前でアセンブリに署名する方法の詳細については、次のトピックでは、Microsoft を参照してください。NET Framework 開発者用ガイド:
厳密な名前でアセンブリを署名します。
http://msdn.microsoft.com/en-us/library/xc31ft41.aspx
このプロセスの詳細については、次のトピックでは、Microsoft を参照してください。NET Framework 開発者用ガイド:
自動トランザクションとします。NET Framework クラス
http://msdn.microsoft.com/en-us/library/ms123400.aspx
back to the top

プロジェクトを作成します。

  1. Visual C# で新しいコンソール アプリケーション プロジェクトを作成するのには、次の手順を実行します。NET:
    1. Visual Studio を起動します。NET。
    2. で、 ファイル メニューのポイント 新しい、し プロジェクト.
    3. で、 新しいプロジェクト ダイアログ ボックス、クリックして Visual C# プロジェクト 下にあります。 [プロジェクトの種類をクリックして コンソール アプリケーション 下にあります。 テンプレート、し [OK].
    4. ソリューション エクスプ ローラーで、Class1.cs ファイル DistributedTransaction.cs として名前を変更します。
  2. すべてのコードは、DistributedTransaction.cs ファイルから削除します。
  3. で、 プロジェクト メニューをクリックして 参照を追加します。、し、次の参照を追加します。
    • System.EnterpriseServices
    • System.Data.dll

  4. AssemblyInfo.cs ファイルには、コードの次の行をコメントにします。
    [assembly: AssemblyKeyFile("")][assembly: AssemblyKeyName("")]					
  5. DistributedTransaction.cs ファイルに次のコードを追加します。
    using System;using System.Data.SqlClient;using System.EnterpriseServices;using System.Runtime.CompilerServices;using System.Reflection;[assembly: ApplicationName("DistributedTransaction")][assembly: AssemblyKeyFileAttribute("..\..\DistributedTransaction.snk")]namespace DistributedTransaction{   /// <summary>   /// Summary description for Class1.   /// </summary>   class Class1   {      /// <summary>      /// The main entry point for the application.      /// </summary>      [STAThread]      static void Main(string[] args)      {         try         {            DistributedTran myDistributedTran = new DistributedTran();            myDistributedTran.TestDistributedTransaction();         }         catch (System.Data.SqlClient.SqlException e)         {            System.Console.WriteLine("Transaction Aborted: Error returned: " + e.Message);         }               }   }   /// <summary>   /// Summary description for TestApp.   /// </summary>   [Transaction(TransactionOption.Required)]   public class DistributedTran: ServicedComponent    {      public DistributedTran()      {      }      [AutoComplete]      public string TestDistributedTransaction()      {         // The following Insert statement goes to the first server.         // This Insert statement does not produce any errors.          String insertCmdSql = "Insert Into TestTransaction (Col1, Col2) Values (1,'Sql Test')";         // The following Delete statement goes to the second server.         // Because the table does not exist, this code throws an exception.         String exceptionCausingCmdSQL = "Delete from NonExistentTable";                              // The following connection strings create instances of two SqlConnection objects         // to connect to two different SQL Server servers in your environment.         // Modify the connection strings as necessary for your environment.         SqlConnection SqlConn1 = new SqlConnection("Server=Server_Name;uid=User_Id;database=DatabaseName;pwd=Password");         SqlConnection SqlConn2 = new SqlConnection("Server=Server_Name;uid=User_Id;database=DatabaseName;pwd=Password");         try         {            SqlCommand insertCmd = new SqlCommand(insertCmdSql,SqlConn1);            SqlCommand exceptionCausingCmd = new SqlCommand(exceptionCausingCmdSQL,SqlConn2);               // This command runs properly.            insertCmd.Connection.Open();            insertCmd.ExecuteNonQuery();            // This command results in an exception, which automatically rolls back            // the first command (the insertCmd command).            exceptionCausingCmd.Connection.Open();            int cmdResult = exceptionCausingCmd.ExecuteNonQuery();                        SqlConn1.Close();            SqlConn2.Close();            Console.WriteLine("Hello");                     }         catch (System.Data.SqlClient.SqlException ex)         {            // After you catch the exception in this function, throw it.             // The service component receives this exception and             // aborts the transaction. The service component then            // throws the same exception, and the calling function            // receives the error message.            Console.WriteLine (ex.Message);            throw (ex);         }         finally          {            // Close the connection.            if (SqlConn1.State.ToString() == "Open")               SqlConn1.Close();            if (SqlConn2.State.ToString() == "Open")               SqlConn2.Close();         }         return "Success";             }   }}					
  6. で、 ファイル メニューをクリックして すべて保存します。.
  7. クリックしてください。 開始、ポイント プログラム、ポイント マイクロソフトの Visual Studio。NET、ポイント Visual Studio。NET のツール、し Visual Studio。NET コマンド プロンプト.
  8. プロジェクトを含むフォルダーを開き、厳密な名前でアセンブリに署名するのには、次のコマンドを実行します。
    sn-k DistributedTransaction.snk
  9. アプリケーションをビルドします。
  10. 最初の SQL Server サーバーで、次の表を作成します。
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TestTransaction]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)drop table [dbo].[TestTransaction]GOCREATE TABLE [dbo].[TestTransaction] (	[Col1] [int] NULL ,	[Col2] [varchar] (100) NULL ) ON [PRIMARY]GO 					
  11. アプリケーションを実行します。(これは正常な動作です)、次のエラー メッセージが表示されることに注意してください。
    トランザクションが中止されました: エラー: 無効なオブジェクト名 'NonExistentTable'。
  12. SQL Server クエリ アナライザーを開き、次のコードを追加する、クエリを実行する F5 キーを押します。
    USE NORTHWIND;SELECT * FROM TestTransaction WHERE Col1=1 AND Col2='Sql Test'						
    トランザクションが中止されたため、クエリ行返さないことに注意してください。
  13. Visual C# プロジェクトに次のコードを見つけます。
    String exceptionCausingCmdSQL = "Delete from NonExistentTable";						
    トランザクションを中止するのには発生しません有効なクエリを SQL ステートメントを置き換えます。たとえば。
    String exceptionCausingCmdSQL = "Select @@Identity from customers";					
  14. F5 キーを押してコンパイルし、もう一度アプリケーションを実行します。
  15. もう一度手順 12 では、クエリ アナライザーから、コマンドを実行します。トランザクションが正常に完了することができましたので、クエリ行を返すことに注意してください。
メモ:
  • 次の使用例は、エラー処理を行いません。
  • SQL Server および Microsoft 分散トランザクション コーディネーター (MS DTC) では、すべてのクライアントとサーバーを実行しなければなりません。
back to the top
関連情報
詳細については、「サポート技術情報」資料を参照するには、次の文書番号をクリックしてください。
306296 方法: サービスを作成します。Visual C# でトランザクションを使用して NET コンポーネント。NET

警告: この記事は自動翻訳されています

プロパティ

文書番号:316247 - 最終更新日: 07/24/2011 22:31:00 - リビジョン: 5.0

  • kbhowtomaster kbsqlclient kbsystemdata kbcompiler kbmt KB316247 KbMtja
フィードバック
="var m=document.createElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?"> >