Используется:
- MSAccess 2016.
- Автоинкремент "ID" формируется в таблице базы данных.
- DevExpress.
- gridControl.
После добавления новой записи в «gridControl1» мне нужно добавить «ID» из базы данных.
Сценарий_1:
- Пользователь.Заполняет обязательные поля;- Пользователь.Смещает фокус на «gridControl1»;
- Программа.Добавляет новую запись в «gridControl1» - «Record_1»;
- Программа.Используя событие Row_Changed
, мы добавляем запись «Record_1» в «базу данных»;
- Программа.Получить идентификатор «Запись_1» из базы данных;
- Программа.Обновляет идентификатор в «DataTable» для новой записи «Record_1»;
После выполнения сценария «Сценарий_1» пользователь пытается обновить любое поле новой записи.
Сценарий_2:
- Пользователь.Изменяет поле ввода «Запись_1»;
- Пользователь.Смещает фокус на другую запись;
- Программа.Выдает ошибку «UpdateCommand затронул 0 из 1 ожидаемых записей.»;
Как исправить ошибку «UpdateCommand затронул 0 из 1 ожидаемых записей.»?
![enter image description here](https://i.stack.imgur.com/FKtbZ.png)
добавлено
Состояние при возникновении ошибки ![enter image description here](https://i.stack.imgur.com/JyG5J.png)
public void connect()
{
string catBD = @"z:\vs\csharp\prb\718\01_pr\01_pr\01_pr\718.01.01.accdb";
string conBD = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}", catBD);
connection = new OleDbConnection(conBD);
connection.Open();
string query1 = "SELECT * FROM TableGrid_00";
OleDbCommand cmd1 = new OleDbCommand(query1, connection);
dt = new DataTable();
try
{
adapter = new OleDbDataAdapter(cmd1);
cmdBuilder = new OleDbCommandBuilder(adapter);
adapter.UpdateCommand = cmdBuilder.GetUpdateCommand();
adapter.InsertCommand = cmdBuilder.GetInsertCommand();
}
catch (Exception ex)
{
string s = ex.Message;
throw;
}
adapter.Fill(dt);
dt.RowChanged += new DataRowChangeEventHandler(Row_Changed);
}
private void Row_Changed(object sender, DataRowChangeEventArgs e)
{
adapter.Update(dt);
string SearchByColumn = "ID is null";
DataRow[] hasRows = dt.Select(SearchByColumn);
if (hasRows.Length != 0)
{
string query = "SELECT MAX(ID) FROM TableGrid_00";
OleDbCommand com;
OleDbDataReader dataReader;
com = new OleDbCommand(query, connection);
dataReader = com.ExecuteReader();
dataReader.Read();
int resultQuery = dataReader.GetInt32(0);
hasRows[0]["ID"] = resultQuery;
dataReader.Close();
}
else
{
}
}