2015-04-05 1 views
0

У меня есть таблица в базе данных SQL (в локальной сети) с 5 000 + строками. Эти данные загружаются в данные, хранящиеся в памяти, в клиентском приложении, которое я разрабатываю для конечных пользователей для просмотра, поиска и обработки записей.Обновление таблицы SQL с изменениями, внесенными в datatable в памяти

Мой вопрос: после того, как пользователь закончил манипулирование данными, что является лучшим способом записать его обратно в таблицу SQL? Я мог бы очистить таблицу SQL и отправить весь объем данных, хранящийся в памяти, на SQL-сервер, но, учитывая большое количество записей, это выглядит как изворотливый и неэффективный процесс.

У кого-нибудь есть решение, которое приходит на ум? Например, каким-то образом отслеживать записи, которые были изменены пользователем и только обновлять их через SQL-запрос?

Какой был бы лучший способ справиться с этим? Я рад полностью переосмыслить свой подход, если это необходимо.

+0

[SqlDataAdapter.Update] (https://msdn.microsoft.com/en-us/library/z1z2bkx2 (v = vs.110) .aspx) и около _tracking changes_ не изобретать велосипед. [DataRow.RowState] (https://msdn.microsoft.com/en-us/library/system.data.datarow.rowstate (v = vs.110) .aspx) – Steve

+1

Привет, Стив, спасибо за руководство. Это первый раз, когда я сделал что-то подобное, но это похоже на то, что мне нужно. Еще раз спасибо – tpag26

+0

С большим количеством записей DataAdapter может быть медленным. Если вы столкнулись с горлышками бутылок, подумайте о том, чтобы сохранить весь DataTable во временную таблицу (например, Select * Into #MyTemp From YourTableName), используйте SqlBulkCopy для сохранения данных, а затем используйте оператор MERGE, чтобы заставить базу данных применить ваши изменения, –

ответ

0

Когда вы настраиваете свой набор данных, вы можете определить оператор обновления, соответствующий вашим потребностям.

Данные, которые вы манипулируете, будут отслеживать собственные изменения, и вы можете их захватить с помощью метода GetChanges. Когда вы вызываете функцию адаптера Update, вы можете отправлять только изменения данных.

https://msdn.microsoft.com/en-us/library/k2552649%28v=vs.110%29.aspx

https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.update%28v=vs.110%29.aspx

0

SqlDataAdapter.Update и отслеживание изменений не изобретают колесо. DataRow.RowState - Steve

Смежные вопросы