我有一個數據庫表有2列,我有一個列表,其中T有2個屬性。更新數據庫在交易清單<T>
如何創建一個事務,這樣我可以有效地說:
UPDATE MyTable
SET ColumnA = List<T> 1st property
WHERE ColumnB = List<T> 2nd Property
可能不一定需要一個事務,如果一個更新將得到執行,但如果我有我的列表中100個項目將需要什麼得到這個工作?
我有一個數據庫表有2列,我有一個列表,其中T有2個屬性。更新數據庫在交易清單<T>
如何創建一個事務,這樣我可以有效地說:
UPDATE MyTable
SET ColumnA = List<T> 1st property
WHERE ColumnB = List<T> 2nd Property
可能不一定需要一個事務,如果一個更新將得到執行,但如果我有我的列表中100個項目將需要什麼得到這個工作?
你需要在一個循環中執行這些更新語句,循環您的列表
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();
}
}
除非這是多個更新(即它是更新語句的多次執行),否則不需要事務。
也許你應該給上實際執行的代碼的詳細信息...
好點,交易可能不是必需的。然而,我仍然需要知道如何編寫SQL/C#才能正常工作 – Jon
對於使用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();
}
我認爲可能是 – Jon
+1,但是您可以(也可能應該)使用'command.Parameters.AddWithValue'來添加值。 –