2011-10-12 53 views
3

我有一個數據庫表有2列,我有一個列表,其中T有2個屬性。更新數據庫在交易清單<T>

如何創建一個事務,這樣我可以有效地說:

UPDATE MyTable 
SET ColumnA = List<T> 1st property 
WHERE ColumnB = List<T> 2nd Property 

可能不一定需要一個事務,如果一個更新將得到執行,但如果我有我的列表中100個項目將需要什麼得到這個工作?

回答

1

你需要在一個循環中執行這些更新語句,循環您的列表

using(var connection = new SqlConnection(connectionString)) { 
    connection.Open(); 
    using(var transaction = connection.BeginTransaction("Transaction")) { 
     foreach(var item in list) { 
      using(var command = connection.CreateCommand()) { 
       command.Transaction = transaction; 
       command.CommandText = // set the command text using item 
       command.ExecuteNonQuery(); 
      } 
     } 
     transaction.Commit(); 
    } 
} 
+0

我認爲可能是 – Jon

+1

+1,但是您可以(也可能應該)使用'command.Parameters.AddWithValue'來添加值。 –

0

除非這是多個更新(即它是更新語句的多次執行),否則不需要事務。

也許你應該給上實際執行的代碼的詳細信息...

+0

好點,交易可能不是必需的。然而,我仍然需要知道如何編寫SQL/C#才能正常工作 – Jon

6

對於使用PetaPoco那些,我相信這是做到這一點的正確方法:

var db = new PetaPoco.Database("MyDB"); 

try 
{ 
    db.BeginTransaction(); 
    foreach (var item in NewData) 
    { 
     db.Execute("UPDATE MyTable SET ColA= @0 WHERE ColB = @1",item.PropertyA, item.PropertyB); 
    } 
    db.CompleteTransaction(); 

} 
catch (Exception ex) 
{ 
    db.AbortTransaction(); 
} 
+0

這不應該沒有參數 – Schotime

+0

好點。已經更新了我的答案。 – Jon