2011-12-04 12 views
0

問題は、私は "取引"を伝票ヘッダ(注文テーブル)と詳細(注文詳細テーブル)..と記録しなければならないということです。送り状として言う..テーブルヘッダとアイテム(DETAIL)は、あなたはテーブルの詳細の1つ以上の項目です。注文と注文詳細テーブル(nレジストリ)のトランザクションを作成する方法は?

質問:Nレコード(パラメータセット)

EDITを渡す方法はあります。私はこのトランザクションをSQL Serverのアプリケーションクライアントではなく書いておく予定です

+0

これ確かにすることができますどのようにデータアクセス方法を使用するかによって異なります。これは純粋な 'SqlCommand'やlinq-to-sqlのようなものを使用していますか? –

+0

いいえ、私はクライアントアプリケーションでデータセットを使用しています。そして私はストアドプロシージャ名を呼び出すだけです – Darf

+0

SQL 2008/.Netでは、SQLにデータテーブルをダンプすることができます。これを参照してくださいhttp://www.eggheadcafe.com/community/ado/10/10138579/passing-dataset-to-stored-procedure.aspx – u07ch

答えて

0

データベースではなく、クライアント(C#アプリケーションなど)からの接続でトランザクションを開く必要があります。擬似コード:

  • オープン接続
  • オープントランザクション
  • 店舗注文データ項目の
  • = 1 ... N
    • 店舗注文アイテム
  • トランザクション
  • をコミット
  • close connection

はここにあなたの特定のケースを説明するためにわずかに変更され、マイクロソフトからの例です: http://msdn.microsoft.com/en-us/library/2k2hy99x(v=VS.100).aspx

using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    connection.Open(); 

    // Start a local transaction. 
    SqlTransaction sqlTran = connection.BeginTransaction(); 

    // Enlist a command in the current transaction. 
    SqlCommand command = connection.CreateCommand(); 
    command.Transaction = sqlTran; 

    try 
    { 
     // Execute two separate commands. 
     command.CommandText = 
      "INSERT INTO Order ..."; 
     command.ExecuteNonQuery(); 

//注:あなたはそれを渡すことができますので、あなたのコマンドは、おそらく、新しい秩序のIDを返す必要がありますOrderItemは以下を挿入します。その場合、IDを返すためにcommand.ExecuteScalar()またはcommand.ExecuteReader()を使用することができます。最も単純なシナリオでは、テキストとして「@@ SCOPE_IDENTITY()を選択し、」持つ別のコマンドを実行することができ、それはあなたの挿入を処理するためのストアドプロシージャを記述するために多くの方が良いでしょう(とIDを返す)

 foreach (var item in order.Items) 
     { 
      command.CommandText = "INSERT INTO OrderItem ... "; 
      command.ExecuteNonQuery(); 
     } 

     // Commit the transaction. 
     sqlTran.Commit(); 
    } 
    catch (Exception ex) 
    { 
     // Handle the exception if the transaction fails to commit. 
     Console.WriteLine(ex.Message); 

     try 
     { 
      // Attempt to roll back the transaction. 
      sqlTran.Rollback(); 
     } 
     catch (Exception exRollback) 
     { 
      // Throws an InvalidOperationException if the connection 
      // is closed or the transaction has already been rolled 
      // back on the server. 
      Console.WriteLine(exRollback.Message); 
     } 
    } 
} 
関連する問題