2016-11-14 22 views
0

我的問題涉及如何在一個訂單上插入多個訂單項,例如在單個事務的範圍內。在單個事務的範圍內多次調用相同的ADO.NET命令

必須插入所有行項目或必須回滾事務。

可以在不發送自定義CLR對象作爲參數的情況下對同一張表進行多次插入,相當於一個表值參數? MyInsertSingleLineItemCommand是否可以在循環中調用,並在每次調用時插入一個行項目?我們需要中介臨時表嗎?

+0

當然。 dotnet中有一個SqlTransaction類,可以用來開始/提交/回滾。 https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqltransaction(v=vs.110).aspx –

+0

是的,這是可能的,但一個表值參數會更有效率在這案件。 –

回答

1

可以將多個插入到同一個表,不發送 自定義的CLR對象作爲參數來完成,相當於表值參數 ?

是的,您可以使用SqlTransaction在單個事務中逐行進行。

可以在循環中調用MyInsertSingleLineItemCommand,在每次調用時插入 一個行項目?

是下面的示例代碼。

using (SqlConnection cn = new SqlConnection("YOUR CONNECTION STRING") 
{ 
    cn.Open(); 
    using (SqlTransaction tr = cn.BeginTransaction()) 
    { 
      // your looping code here persisting to sql server db 
      tr.Commit(); 
    } 
} 

您也可以使用TransactionScope來完成此操作。

using (var ts = new TransactionScope()) 
{ 
    using (SqlConnection connection = new SqlConnection("YOUR CONNECTION STRING")) 
    { 
     connection.Open(); 
     // your looping code here persisting to sql server db 
    } 

    ts.Complete(); 
} 

我們需要一箇中間臨時表?

不,你不需要臨時表。

這就是說你可能想要考慮使用SqlBulkCopyTable Value Parameter來傳遞你的數據到Sql Server。儘管這取決於你的要求。

More info here on TVPs

相關問題