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

 

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

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

Сеппа Д. Microsoft ADO.NET — М.: Русская Редакция, 2003. — 640 c.
ISBN 5-7502-0223-2
Скачать (прямая ссылка): mcrsftado2003.pdf
Предыдущая << 1 .. 167 168 169 170 171 172 < 173 > 174 175 176 177 178 179 .. 260 >> Следующая

Метод RefreshSchema
Если в приложении вы изменяете структуру запроса, используемого объектом DataAdapter, вам, возможно, пригодится метод RefreshSchema объекта Command-
Builder.
Когда изменяется значение свойства CommandText запроса SelectCommand. определенного для объекта DataAdapter, какие-либо события объекта DataAdapter не После того как CommandBuilder сгенерирует вашу логику
ния, его по его мнению, будет Если изменили структуру запроса,
используемого объектом DataAdapter и объекту CommandBuilder требуется генерировать логику обновления заново, можно вызывать метод resbScbema.
При этом объект CommandBuilder не приступит к работе сразу же. Будет просто установлен флаг, указывающий, что текущая логика неправильна. Command-Builder сгенерирует логику обновления заново только при вызове метода
Adapter.lpd.at или одного из методов Get<l<pduUe/lYisen/nefa;e>CGaunai объекта CommandBuilder,
398
Часть Автономная работа с данными: объект DataSet модели А.Ю ив г
Вопросы, которые стоит задавать почаще
Вопрос. Итак, объект DataAdapter может заполнить объект DataSet результатами запроса и передать отложенные изменения из объекта DataSet в БД. Нужно ли в обоих случаях использовать один и тот же объект i~HitaAdai)t<-r Я работаю с многоуровневыми приложениями, и, похоже, что между вызовами из клиентского приложения мне требуется на промежуточном уровне поддерживать тельность» объектов DataAdapter. Так ли это?
Ответ. Вам предоставлена возможность заполнить объект DataSet и передать изменения в БД при помощи одного и того же объекта DaioAdajiiei ¦ однако это
не обязательно.
Скажем, у вашего объекта промежуточного уровня имеются два простых метода, один из которых возвращает новый объект DataSet. а другой — передает отложенные изменения из DataSet в БД. Для каждого из методов можно задействовать отдельные объекты DataAdapter. Если вы просто заполняете объект DataSet, объекту DataAdapter лотка обновления не требуется. Если же вы используете DataAdapter только для передачи для него, не требуется
определять значение свойства
На самом деле для объекта DataAdapter следует определять только те объекты Command, которые будут выполняться. Так, если вы знаете, что DataAdapter будет
только передавать новые записи (а не изменять или удалять существующие), можно определить только значение свойства InsertCammand. Поскольку DataAdapter не ¦будет выполнять объекты Command, хранящиеся в свойствах SelectCommand. Update-и задавать значения этих свойств не требуется.
Единственное исключение из данного правила связано с определением логики обновления для объекта DataAdapter при помощи объекта CommandBuilder, Последнему не удастся сгенерировать логику обновления, если не определено
значение свойства SelectCommand объекта DataAdapter.
Вопрос. Мне нужно заполнить объект DataTable результатами соединяющего запроса, изменить содержимое этого объекта и затем передать изменения в БД с
помощью объекта DataAdapter. Создать требуемую логику обновления нельзя ни
средствами мастера Data Adapter Configuration Wizard, ни объекта CommandButtder. Как быть?
Ответ. Прежде всего, рекомендую просмотреть раздел главы 7, посвященный соединяющим запросам.
Ни один из указанных компонентов не способен создавать логику обновления потому, что неясно, что же на самом деле будет означать изменение возвращенных запросом данных. Возьмем для примера запрос, возвращающий сведения о заказанных товарах, и изменим его так, чтобы наборе результатов он возвращал и названия товаров:
SELECT O.OrderlD. P. ProductName, D.PioductlD. ID.Quantity, D.UnitPrice FROM [Order Details] D, Products P
WHERE D.OrderlD = 10503 AND D.ProductID = P.ProductID ORDER BY P.ProductID
ГЛАВА 10 Передача обновлений в базу данных 399
Если выберем результаты запроса в объект DataTable и .umvohm одну из записей, то как следует отредактировать содержимое БД? Нам ответ ясен. Нужно изменить соответствующую запись таблицы Order Details БД Однако для мастера Data Adapter Configuration Wizard и объекта CommandBuilder такой ответ не очевиден.
Ядро курсоров ADO автоматически генерирует для вас логику обновления, даже при работе с соединяющими K::pccs::o:, однако эта логика многих p,i:spa6<rчп-ков разочаровала. Если сгенерировать с помощью показанного запроса объект Recordset ADO и изменить лишь поля, соответствующие таблице Order Details, ядро курсоров ADO попытается изменить только соответствующую запись таблицы Order Details.
Однако, если вы захотите заказать другой товар и, чтобы запись данных отображалась правильно, отредактируете значения полей ProductlD (таблица Order Details) и ProductName (таблица Products), ядро курсоров ADO попытается изменить значение поля ProductlD в таблице Order Details и значение поля ProductName в таблице Products. Спорю, что это вам совсем не нужно.
К счастью, в отличие от ADO, AI >0 N Г I не является > 'itpi n-, im ящиком» и нежа ляет вам создавать собственную логику обновления. В рассматриваемом случае обновления нужно передать только в таблицу Order Details и поэтому можно определить собственную логику игнорирующую изменения содержимого столбца ProductName.
Предыдущая << 1 .. 167 168 169 170 171 172 < 173 > 174 175 176 177 178 179 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100