2011-12-04 56 views
0

問題是,我必須記錄一個「交易」是憑證標題(訂單表)和詳細信息(訂單明細表)..說作爲發票..表頭和物品(細節)的事情是,一個標題記錄您是表中的1個或多個項目的詳細信息。如何爲訂單和訂單詳細信息表(n個註冊表)創建交易?

的問題是:有沒有辦法通過N條記錄(參數集)

編輯。我打算從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
    • 店訂單項目
  • 提交事務
  • 關閉連接

下面是來自微軟的例子,略作修改,說明你的具體情況: 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插入在下面;在這種情況下,您可能需要使用command.ExecuteScalar()或command.ExecuteReader()來返回ID;在最簡單的情況下,您可以執行與「SELECT @@ 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); 
     } 
    } 
} 
相關問題