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

 

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

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

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

доступа к данным Microsoft такая функциональность отсутствует.
Приложение, выбирающее значения автоинкремента
Я описал несколько einv.iiurn. связанных с выборкой новых значений автоинкремента и последовательности в объект DataSet. Для получения новых значений автоинкремента SQL Server используют пакетные запросы, параметры вывода хранимых процедур и события объекта для новых зна-
чений автоинкремента Access - события Ron-Updatedобъекта DataAdapter, для новых значений последовательности Oracle — параметры вывода хранимых процедур или события RowUpdatedo6\,cK\:\ DataAdapter. Выбор велик.
На прилагаемом к книге компакт-диске записано приложение (на Visual Basic N111 и Visual С* .NET), которое поможет вам разобраться во всем этом, демонстрируя на практике каждую ситуацию и каждого варианта выборки значений. На рис. і . показана одна из версий этого приложения, ЛииНп.тс-meiuSql. Кроме того, на компакт-диске есть примеры, выбирающие значения автоинкремента из БД Access, а также значения последовательности из БД Oracle.
* SQL Server
Summary
jlhrs sample demonstrates various ways of retrieving newly generated auto inciemenl values liom a SQL [Server database
! When you dick any of the buttons below. I he codewil run a test that adds new rows to a DataTabta \andthen submits those new rows to your database
The lest will display the contents of Iho automctemenl column for each row mthe DataTaUe both ?Store and after submrtting the new rows to your database.
Each lesl re-sefc the contents of the lesl table rn your database and inserts two initial lows As a result, jyout new rows should have auto-hcrement values of 3. *. and 5.
Normal
Results:
r;.:.llir. .i: г.] new ^..У:ґ^-іґі^. values Sif*^ output р.їг.ї№.г~г.гг
1 {Before submitting new rows todatabase: Batched QueryFa , cir3, new [ои ю „
Second пей low ID » -2 Third new row ID = -3
Handle RnwUpdatrrg Event
Stoioo" Procedure Output Parametei
&ІІБГ submitting new tows lo database First new row ID - 3
'3econdnewrowlD=4 Third new low ID = 5
Рис. 11-3. Приложение AurmiK.rum.-niSql
41 8
Часть III Автономная работа с данными: объект DataSet модели ADO.net
Использование ключевого слова INOCOUNT SQL Server
Многие администраторы БД добавляют в триггеры и/или хранимые процедуры логику для отслеживания выполняемых приложениями запросов. Хранимая процедура, вставляющая новую злима.. может выглядеть так:
CREATE PROCEDURE spOrderlnsert (eOrderlD int OUTPUT, ©CustomerlD nchar(5), ©EmployeelD int, fOrderDate datetime) AS
INSERT INTO Orders (CustomerlD, EmployeelD, OrderDate)
VALUES (@CustomerlD, ©EmployeelD, ^OrderDate) SELECT eOrderlD = SCOPE_IDENTITY() INSERT INTO OrdersLog (TypeOfChange, DateOfChange)
VALUES (WrderlD + ' added', GetDateO) RETURN
Ее задают свойству !тегЮ>»п>шш, объекта DaicMapter. чтобы успешно передать изменения. Тем не менее передача обновлений средствами такой же процедуры вызовет проблемы. Что еще хуже, эти проблемы могут проявить себя только после развертывания приложения.
Чтобы разобраться в этом, рассмотрим следующую процедуру включающую аналогичный код ведения журнала:
CREATE PROCEDURE spOrderUpdate (®CustomerID_New nchar(5), №nployeeID_New int,
@Orderuate_New datetime, #OrderID_Orig int,
#CustomerID_Orig nchar(5), 9EmployeeID_0rig int,
«OrderDate_Orig datetime)
AS
UPDATE Orders
SET CustomerlD = §CustomerID„New, EmployeelD = №nployeeID Jlew,
OrderDate = GOrderDate.New WHERE OrderlD = @OrderID_Orig AND CustomerlD = ®CustomerID_Orig AND EmployeelD = @>EmployeeID_Orig AND OrderDate = 90rderDate_0rig IF @#R0WCOUNT = 1
INSERT INTO OrdersLog (TypeOfChange, DateOfChange)
VALUES ('Modified order ' + ®0rderID_Orig, GetDateO)
ELSE
INSERT INTO OrdersLog (TypeOfChange, DateOfChange)
VALUES (Tailed to modify order ' + @OrderID_Orig, GetDateO)
RETURN
\\\,\.\v.w ее в SQL Server Query Analyzer для обновления заказа, вы увидите такой вывод в окне Results:
(1 affected)
(1 row(s) affected)
ГЛАВА 11 Сложные случаи обновления данных
419
Обработано две записи? Хранимая процедура обновила только один заказ, Использование первичного ключа в разделе WHERE запроса UPDATE гарантирует, что запрос изменит не более одной записи. Вторая запись, обработанная хранимой процедурой, — это запись, вставленная в таблицу журнала.
Такие же результаты вы получите, создав объект Command ADO.NET для вызова хранимой процедуры и обновления заказа. Метод ExecuteNonQueryBevneT 2.
Данная хранимая процедура добавляет запись в таблицу журнала независимо от успеха или неудачи обновления, Таким образом, если возникнет ошибка обновления, связанная с оптимистическим контролем параллелизма, хранимая процедура сообщит, что обработала одну запись.
Бы, наверное, понимаете, что одна обработанная хранимой процедурой запись соответствует неудачной попытке обновления. Однако для ADO.NET это не так, DataAdapter проверяет число обработанных запросом записей, и только число, равное нулю, соответствует ошибке обновления. В противном случае предполагается, что обновление прошло успешно.
Предыдущая << 1 .. 176 177 178 179 180 181 < 182 > 183 184 185 186 187 188 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100