У меня есть форма с информацией о клиенте, которую нужно обработать по одной транзакции на страницу.Я использую навигатор для управления пагинацией.
Это работает во всех случаях, кроме некоторых.В тех случаях, когда это не работает, мне нужно открыть другое окно, чтобы найти информацию и вернуть ее в основную форму.Вот код для этого:
// save current work
updateDataTable();
// Open a window and get new customer info
// CurrentCustomer is returned from the opened window
using (SqlConnection cx = new SqlConnection(GetConnectionString()))
{
DataRowView dataRow = (DataRowView)procBindingSource.Current;
dataRow.BeginEdit();
dataRow["CUSTOMER"] = CurrentCustomer;
dataRow.EndEdit();
updateDataItems();
SqlCommand cmd = new SqlCommand(
@" select acct_no from cust_processing where id = @id ", cx);
cmd.Parameters.AddWithValue("@id", (int)dataRow["ID"]);
cx.Open();
var results = cmd.ExecuteScalar();
if (results != null)
{
dataRow.BeginEdit();
dataRow["ACCT_NO"] = results.ToString();
dataRow.EndEdit();
updateDataItems(); <------ CONCURRENCY ERROR
}
}
Ошибка, которую я получаю, является ошибкой параллелизма.Я думаю, что у меня есть более одной версии строки, возможно?Я думал, что я был уверен, что я был на самой последней версии строки, вызывая updateDataTable ().Я единственный пользователь, поэтому знаю, что сам создаю проблему.
Вот мой метод обновления, который вызывается, когда я меняю страницы или сохраняю и завершаю работу или хочу записать коммит данных:
void updateDataItems()
{
this.procBindingSource.EndEdit();
this.procTableAdapter.Update(xyzDataSet);
xyzDataSet.AcceptChanges();
}
Я пытался выполнить updateDataItems из разных мест, таких какпосле того, как я назначу dataRow ["ACCT_NO"] = results.ToString () или до и после назначения этого.
Я почти угадал и проверил, так что любые мысли, помощь и советы будут оценены и + 1.