2013-11-27 6 views
0

У меня есть DataTable переплетены в DataAdapter со следующим C# код:Обновление первичного ключа при вставке новой строки в DataTable через DataGrid

MySQLConnection conn = ... 

string sql = "SELECT ..."; 
adapter = new MySqlDataAdapter(sql, conn); 
adapter.Fill(this); // this is the DataTable used by the grid 

MySqlCommandBuilder builder = new MySqlCommandBuilder(adapter); 
// here the adapter.UpdateCommand/.InsertCommand/.DeleteCommand code 

RowChanged += LyricsDataTable_RowModified; 
RowDeleted += LyricsDataTable_RowModified; 
TableNewRow += LyricsDataTable_TableNewRow; 

Затем DataGrid использует dataTable.AsDataView() в ItemsSource отеле находится стоимость.

Он отлично работает для обновления или вставки строк с помощью adapter.Update(this); в методах обработчика событий.

Как только он вставлен, я хотел бы обновить первичный ключ в DataTable.

Каков наилучший способ достичь этого (хорошо, я мог бы вызывать SELECT LAST_INSERT_ID, но, я думаю, есть лучший способ DAO для получения этой информации)?

ответ

0

В нашем продукте у нас есть общий API, который вставляет контракт с данными (в таблицу данных вашего случая) и возвращает заключенный контракт с долгом с его первичным ключом и MSrowversion. Наша MSRowVersion обновляется каждый раз, когда мы касаемся этой строки. Возможно, вам придется сделать то же самое. Каждый раз, когда вы вставляете/обновляете, вы возвращаете обновленную строку. Если у вас есть время, попробуйте создать свой собственный помощник DAL.

Другой простой способ сделать это - использовать .Net Entity Framework. Когда вы вставляете/обновляете с помощью EF, он возвращает последнюю строку по умолчанию. Это ORM, и он очень прост в использовании, но он работает с SQL-сервером только насколько я могу судить. Проверьте это question