ADO.Net получает значения автоинкремента для базы данных MS Access в строго типизированных наборах данныхC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 ADO.Net получает значения автоинкремента для базы данных MS Access в строго типизированных наборах данных

Сообщение Anonymous »

Я пишу клиентское приложение базы данных на C#, используя MS Access в качестве сервера БД.

Пользователи вставляют новые строки с помощью 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( );
}
}
Проблема в том, что дизайнер VS IDE создает строго типизированный набор данных без внешней видимости объекта DataAdapter.

Он создает TableAdapter, унаследованный от Component, но не от DataAdapter.

И хотя он создает настоящий DataAdapter внутри класса myTableTableAdapter, он имеет защищенный уровень.

Код: Выделить всё

protected internal global::System.Data.OleDb.OleDbDataAdapter Adapter
Поэтому я не могу добавить в адаптер какое-либо событие за пределами класса myTableTableAdapter.

Я предполагаю, что код должен быть написан внутри класса 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Общий преобразователь значений для строго типизированных идентификаторов в ef core 8
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Общий преобразователь значений для строго типизированных идентификаторов в ef core 8
    Anonymous » » в форуме C#
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Борьба с таблицей привязки из модели базы данных ADO.NET в ComboBox, которая находится внутри ListView в приложении WPF
    Anonymous » » в форуме C#
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Как аннотировать поле автоинкремента MYSQL аннотациями JPA
    Anonymous » » в форуме JAVA
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Как получить следующее значение автоинкремента в sql
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»