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