开发者

In my typed dataset, will the Update method run as a transaction?

开发者 https://www.devze.com 2023-03-06 20:45 出处:网络
I have a typed dataset for a table called People.When you call the update method of a table adapter and pass in the table, is it run as a transaction?

I have a typed dataset for a table called People. When you call the update method of a table adapter and pass in the table, is it run as a transaction?

I'm concerned that at some point the constraints set in the xsd will pass but the database will reject this item for one reason or another. I want to make sure that the entire update is rejected and I'm not sure that it just accepts what it can until that error occurs.

If it runs as a transaction I have this

Auth_TestDataSetTableAdapters.PeopleTableAdapter tableAdapter = new Auth_TestDataSetTableAdapters.PeopleTableAdapter();
Auth_TestDataSet.PeopleDataTable table = tableAdapter.GetDataByID(1);

table.AddPeopleRow("Test Item", 5.015);
tableAdapter.Update(table);

But if I have to manually trap this in a transaction I wind up with this

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();
}

Either way works but I am interested in the inner workings. Any other issues with the way I've decided to handle this type of row addition?

-- EDIT --

Determined that it does not work as a transaction and will commit however many records are successful until the error occurs. Thanks to the helpful post below a bit of that transactional code has been condensed to make controlling the transaction easier on the eyes:

Auth_TestDataSetTableAdapters.PeopleTableAdapter tableAdapter = new Auth_TestDataSetTableAdapters.PeopleTableAdapter();
Auth_TestDataSet.PeopleDataTa开发者_开发百科ble 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)
{ /* ... */ }


Your approach should work.

You can simplify it a little though:

using (TransactionScope ts = new TransactionScope())
{
     // your old code here
     ts.Complete();
}
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号