1
我有一個名爲People的表格的類型化數據集。當您調用表適配器的更新方法並傳入表時,它是否作爲事務運行?在我輸入的數據集中,Update方法是否作爲事務運行?
我擔心在某些時候xsd中設置的約束會通過,但數據庫會因爲某種原因拒絕這個項目。我想確保整個更新被拒絕,並且我不確定它只是接受它可以發生的錯誤。
如果它會作爲一個交易我有這個
Auth_TestDataSetTableAdapters.PeopleTableAdapter tableAdapter = new Auth_TestDataSetTableAdapters.PeopleTableAdapter();
Auth_TestDataSet.PeopleDataTable table = tableAdapter.GetDataByID(1);
table.AddPeopleRow("Test Item", 5.015);
tableAdapter.Update(table);
但如果我必須手動捕獲該事務中的我風與此
Auth_TestDataSetTableAdapters.PeopleTableAdapter tableAdapter = new Auth_TestDataSetTableAdapters.PeopleTableAdapter();
Auth_TestDataSet.PeopleDataTable table = tableAdapter.GetDataByID(1);
tableAdapter.Connection.Open();
tableAdapter.Transaction = tableAdapter.Connection.BeginTransaction();
table.AddPeopleRow("Test Item", 5.015);
try
{
tableAdapter.Update(table);
tableAdapter.Transaction.Commit();
}
catch
{
tableAdapter.Transaction.Rollback();
}
finally
{
tableAdapter.Connection.Close();
}
兩種方法都可行,但我很感興趣在內部工作。我決定處理這種類型的行添加的方式還有其他問題嗎?
- 編輯 -
決定了它不會作爲交易工作,將致力於然而,許多記錄是成功的,直到發生錯誤。由於有用的帖子下面有一些事務代碼已被濃縮,使得交易控制更容易:
Auth_TestDataSetTableAdapters.PeopleTableAdapter tableAdapter = new Auth_TestDataSetTableAdapters.PeopleTableAdapter();
Auth_TestDataSet.PeopleDataTable table = tableAdapter.GetDataByID(1);
try
{
using (TransactionScope ts = new TransactionScope())
{
table.AddPeopleRow("Test Item", (decimal)5.015);
table.AddPeopleRow("Test Item", (decimal)50.015);
tableAdapter.Update(table);
ts.Complete();
}
}
catch (SqlException ex)
{ /* ... */ }
剛剛意識到,爲什麼它不工作,除了4.0。忘了提及我在3.5 SP1上。好東西,但希望我可以使用它。 – Mohgeroth 2011-05-18 03:05:38
@Mohgeroth - 這不是新的。從2.0開始已經有了 - http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope%28v=VS.80%29.aspx – 2011-05-18 03:09:07
現在我明白了,我不得不手動添加一個引用。首先搜索說4.0,所以我認爲,我的壞。非常棒的小部件來簡化所有這些額外的代碼! – Mohgeroth 2011-05-18 03:10:29