Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Вебмастеру -> Сеппа Д. -> "Microsoft ADO.NET" -> 184

Microsoft ADO.NET - Сеппа Д.

Сеппа Д. Microsoft ADO.NET — М.: Русская Редакция, 2003. — 640 c.
ISBN 5-7502-0223-2
Скачать (прямая ссылка): mcrsftado2003.pdf
Предыдущая << 1 .. 178 179 180 181 182 183 < 184 > 185 186 187 188 189 190 .. 260 >> Следующая

5. удаленные заказы;
6. удаленные клиенты.
Передача изменений
с помощью метода Select объекта DataTabfe
Как рассказывалось в главе 7, метод Oat&T&MeSelec, позволяет искать объекты удовлетворяющие заданным критериям. Так, следующая строка кода возвращает массив и.>них объектов DataRow, ожидающих передачи в БД, значение
422
Часть III Автономная работа с данными: объект DataSet модели ADO NET
поля City которых — Seattle. Возвращенные объекты сортируются по полю Contact-Name.
tbl.Select("Clty = 'Seattle"CoatactMana", DataVtatffiowState.Aedad)
Метод Select возвращает массив объектов DtduRun; а один из перегруженных методов DataAdapter.update принимает такой массив. Какое приятное совпадение!
Данный фрагмент кода с помощью метода Select изолирует нужные изменения и передает их в БД в требуемом порядке:
Visual Basic .NET
Dim ds As OataSet = CraateOateSet()
Dim tblCustomers As DataTable = ds.Tables("Customers")
Dim tblOrders As DataTable = ds.Tables("Orders")
Dim daCustomers As OleDbDataAdapter = CreateCustomersAdapter()
Dim daOrders As OleDbDataAdapter = CreateOrdersAdapter()
FillDataSetAndHodify!tsContents<ds)
'Передаем новые записи о клиентах, затем - о заказах daCustomers.Update(tblCustomers.Select("", "", DataViewRowState,Added)) daOrders.Update(tblOrders.SelectC"", "", DataViewRowState,Added))
измененные записи о клиентах, затем - о заказах daCustomers.Update(tblCustomers.Select("", "",
DataViewRowState.ModifiedCurrent)) daOrders.Update(tblOrders.Select{"", --, DataViewRowState.ModlfiedCurrent))
'Передаем удаленные записи о заказах, затем - о клиентах daOrders. Update{tblOrders.Select("", "", DataViewRowState.Deleted)) daCustome rs.Update(tblCustome rs.Select( "", "", DataViewRowState.Deleted))
Visual C# .mr
DataSet ds = CreateDataSetO;
DataTable tblCustomers = ds.Tables["Customars"]:
DataTable tblOrders = ds.Tables["OrdersM];
OleDbDataAdapter daCustomers = CreateCustomersAdapterO; OleDbDataAdapter daOrders = CreateOrdersAdapterO;
FillDataSetAndModifyltsContents(ds);
//Сначала передаем новые записи о клиентах, затем - о заказах daCustomers.Update(tblCustomers.Select("", "", DataViewRowState.Added)); daOrders,Update(tblOrders.Select("", "", DataViewRowState.Added));
//Передаем измененные записи о клиентах, затем - о заказах daCustomers.Update(tblCustomers.Select("", "",
DataVlewHowState.HodifledCu rrent)); daOrders.Update(tblOrders.Select{"", "",
DataViewRowState.ModifiedCu rrent));
ГЛАВА 1 Сложные случаи обновления данных 423
//Передаек удаленные записи о заказах, затем - о клиентах
daOrders.Update(tblOrders.Select*"", "", DataViewRowState.Deleted));
daCustomers.Update(tblCustomars.Select("", "", DataViewRowState.Deleted));
Передача изменений с помощью метода GetChanges
Управлять порядком передачи изменений удается также с помощью метода O/f.b.v?-ges объектов DataSet и DataTable. Следующий фрагмент кода создает новый объект DataTable, включающий только ожидающие передачи в БД записи из оригинального объекта DataTable:
tblNexCustcmars = tblCustomers. GetChanges(DataRowState.Added) daCustomers.Update(tblNewCustomers)
tblNewOrders = tblOrders.GetChanqes(DataHowSt.ate Added) daOrders.Update(tblNewOrders)
По-моему, такой код удобнее писать и проще читать, чем код на основе метода Select. И все же я не рекомендую вам использовать данный метод.
Вызывая метод GetChanges объектов DataSet и DataTable, вы создаете новый, отдельный объект. Показанный фрагмент кода передает новые записи в таблицы Customers и Orders БД. Таблица Orders БД Northwind включает поле с автоинкрементом — OrderlD. Если объект OrfliL\c!iti>n>r с помощью которого передаются изменения в таблицу Orders, включает логику для выборки новых значений поля OrderlD, эти значения будут вставлены в объект DataTable, используемый методом Update, — tblNewOrders. Однако данный объект DataTable не связан с основным объектом DataTable tblOrders, и поэтому новые значения OrderlD в основном объекте не появятся.
Эта ситуация станет более понятной, когда я буду знакомить вас с изоляцией
и повторной интеграцией изменений в следующих разделах главы.
Если вы передаете измененные записи с помощью метода Select, изменения. возвращенные объектом DataAdapter, вносятся в основной объект DataTable, поскольку Select возвращает массив объектов IhiiuRnu- Фактически элементы этого массива представляют собой указатели на объекты из состава DataTable.
Изменения содержимого массива отражаются на содержимом основного объекта DataTable.
Работа со значениями автоинкремента и реляционными данными
Слегка сместим фокус нашего иерархичного объекта DataSet. Теперь он содержит данные из таблиц БД Northwind Orders и Order Details. Приложение так и останется системой приема заказов. В данном примере пользователь введет два новых заказа клиента, а также товары, входящие в состав этих заказов.
Как вы помните из главы 6, при работе со столбцами с автоинкрементом ствам и объекта
задать значение -1. Если вы последуете этому совету и добавите в иерархию записи о заказах и заказанных товарах, до передачи новых заказов в БД объект DataSet будет выглядеть аналогично показанному на рис
Предыдущая << 1 .. 178 179 180 181 182 183 < 184 > 185 186 187 188 189 190 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100