Пользователи вставляют новые строки с помощью DataGridView. Мне нужно получить значения автоинкремента вставленных строк
Код: Выделить всё
this.MyTableTableAdapter.Update(MyDataSet.MyTable)
Я не могу использовать
Код: Выделить всё
this.MyTableTableAdapter.Fill(MyDataSet.MyTable);
Итак Я прочитал сайт Learn.microsoft.com, раздел «Получение значений идентификаторов или автонумераций»:
https://learn.microsoft.com/en-us/ dotnet/framework/data/adonet/retriving-identity-or-autonumber-values
чтобы понять, как это сделать.
Они пишут об этом расплывчатое описание:
Некоторые механизмы баз данных, такие как механизм базы данных Microsoft Access Jet, не поддерживают выходные параметры и не может обрабатывать несколько операторов в одном пакете. При работе с ядром базы данных Jet вы можете получить новое значение AutoNumber, сгенерированное для вставленной строки, выполнив отдельную команду SELECT в обработчике событий для события RowUpdated адаптера данных.
Я также нашел код, который необходимо выполнить в событии
https://www.safaribooksonline.com/library/ view/adonet-cookbook/0596004397/ch04s04.html
Код: Выделить всё
private void OnRowUpdated(object Sender, OleDbRowUpdatedEventArgs args)
{
// Retrieve autonumber value for inserts only.
if(args.StatementType == StatementType.Insert)
{
// SQL command to retrieve the identity value created
OleDbCommand cmd = new OleDbCommand("SELECT @@IDENTITY", da.SelectCommand.Connection);
// Store the new identity value to the CategoryID in the table.
args.Row[CATEGORYID_FIELD] = (int)cmd.ExecuteScalar( );
}
}
Он создает TableAdapter, унаследованный от Component, но не от DataAdapter.
И хотя он создает настоящий DataAdapter внутри класса myTableTableAdapter, он имеет защищенный уровень.
Код: Выделить всё
protected internal global::System.Data.OleDb.OleDbDataAdapter Adapter
Я предполагаю, что код должен быть написан внутри класса myTableTableAdapter
но код этого класса генерируется автоматически, и в файле есть следующий комментарий
Код: Выделить всё
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
//
//------------------------------------------------------------------------------
Поэтому у меня вопрос: как это сделать? добавить событие RowUpdated для DataAdapter в строго типизированных наборах данных?
Подробнее здесь: https://stackoverflow.com/questions/482 ... ngly-typed