У меня есть типизированный набор данных для таблицы под названием «Люди». Когда вы вызываете метод обновления адаптера таблицы и передаете таблицу, выполняется ли он как транзакция?
Я обеспокоен тем, что в какой-то момент ограничения, установленные в 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)
{ /* ... */ }