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

 

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

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

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

da.RowUpdated += new OleDbRowUpdatedEventBandler(BandleRowUpdated);
DataTable tbl = CreateMyDataTableO;
da.Flll(tbl);
da.Update(tbl);
private void Hafiula3c.y-pdati?o(coj3ct eemSer, OleDbRowUpdatedEventArgs e) {
if ((e.Status == UpdateStatus.Continue) « CCe.StatementType == StateroentType.Insert))
{
e.Row["OrderID"] = (int) cmdGetldentity. ExecuteScalar(); e.Row.AcceptChanges();
J
:
У этого фрагмента кода и фрагмента, выбиравшего новые значения timestamp
с использованием события RoivUpdah-a два отличия. Первое, самое очевидное — то, что для выборки данных выполняется другой запрос.
Второе отличие - в производительности. Какой самый быстрый способ выбрать новые значения автоинкремента? Полученные мной при тестах величины
ГЛАВА Сложные случаи обновления данных
413
производительности соответствовали значениям, полученным при тестах на выборку значений timestamp. Параметры вывода хранимых процедур обеспечивают пакетные запросы — средний, а использование события Row-Updated — наименьший уровень производительности.
Функция ©@ IDENTITY и ключевое слово SCOPE IDENTITY
Запрос SELECT @&ЮЕК HI Л возвращает последнее значение IDENTITY, сгенерированное на данном соединении. Это означает, что работа других пользователей па других соединениях не влияет на результаты вашего запроса. Однако из этого не следует, что вы получите ожидаемое значение.
Администраторы БД зачастую отслеживают изменения содержимого БД с помощью собственных таблиц аудита. Для регистрации изменений обычно применяются триггеры и хранимые процедуры (рис. . 1-2}.
Запрос INSERT INTO Orders...
I Добавляется коаая запись I
БД
Таблица Orders
Триггер INSERT
Добавляйся ноШ запись
Таблица аудигд
3
Рис. 11-2. Отслеживание изменений с помощью таблиц аудита
Почему посреди дискуссии о выборке значений автоинкремента я углубился
в обсуждение журналов аудита и триггеров? Предположим, что таблица аудита, на которую ссылается триггер на рис, включает столбец с автоинкрементом. Вставив в таблицу Orders новую запись и выполнив запрос SELECT @@ IDENTITY, вы получите значение автоинкремента, сгенерированное триггером для новой записи таблицы аудита.
Помните: запрос SELECT Ж>Ж>ENTITY возвращает последнее значение автоинкремента, сгенерированное на данном соединении.
Для решения этой проблемы в SQL Server 2000 реализован новый способ выборки значений автоинкремента: ключевое слово SCOPEJDENTITYO. Выполнив в описанной ситуации запрос SELECT вы получите значение
автоинкремента, сгенерированное для новой записи таблицы Orders.
Если вы работаете с SQL Server или Microsoft Desktop Engine (MSDE) версии 2000 или более поздней, используйте SCOPE IDENTITY вместо @@IDENTITY. Однако из этого правила есть одно небольшое исключение. Если вы вставляете новую запись средствами хранимой процедуры и хотите после ее вызова получить значение автоинкремента, ! 'IN 1 j'i'Yi : вернет Null. Как я и говорил, небольшое
4!4 Часть III Автономная работа с данными: объект DataSet модели ADO.NET
исключение. Если вы вставляете новые записи с помощью хранимой процедуры и вам требуется получить новое значение автоинкремента, "вос.зользултссъ параметром вывода.
Подробнее о различиях @@IDENTITY и SCOPEJDENTITY - в SQL Server Books Online.
Работа с Access 2000
При работе с БД Access новые значения автоинкремента также получают посредством запроса SELECT *.':,йП'Нз\ ill У Эта возможность реализована в 4 версии поставщика OLE DB Jet Provider и поддерживается только БД Access версии 2000 или более поздней. Как и в SQL Server, в Access запрос SELECT ©©IDENTITY возвращает последнее значение автоинкремента, сгенерированное на данном соединении.
БД Access не поддерживают параметры вывода QuervDei — хранимых запросов, аналогичных представлениям и хранимым процедурам. Поставщик OLE DB Jet Provider не предоставляет поддержки пакетных запросов. Таким образом, единственный способ выбрать новые значения автоинкремента — воспользоваться событием Koiit-pdn/rc объекта Da/ciAd-if-ier как рассказывалось ранее.
Работа с последовательностями Oracle
БД Oracle не поддерживают столбцы с автоинкрементом, зато предоставляют аналогичную конструкцию — чоследанаап:гы-oant, (vequenct) В SQL Server вы помечаете столбец как столбец с автоинкрементом, и SQL Server автоматически генерирует новые значения соответствующего поля для вставляемых записей. довательность Oracle ведет себя несколько иначе. Обычно последовательность создают, чтобы генерировать новые значения для столбца БД, однако прямой связи
между последовательностью и таблицей ил столбцом нет. Последовательность
Oracle — это объект, наподобие таблицы или хранимой процедуры. Приведенный ниже запрос создает последовательность Oracle:
create sequence КуSequence
При создании последовательности Oracle можно указать ряд параметров, в частности, ее минимальное и максимальное значения.
Примечание Я не считаю себя экспертом по последовательностям Oracle. Я умею создавать и использовать их в простых запросах INSERT и SELECT, но не более того. Подробнее о последовательностях — в документации Oracle.
Предыдущая << 1 .. 174 175 176 177 178 179 < 180 > 181 182 183 184 185 186 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100