Передача обновлений с использованием хранимых процедур
| Индекс материала |
|---|
| Передача обновлений с использованием хранимых процедур |
| Страница 2 |
| Страница 3 |
| Страница 4 |
| Страница 5 |
| Страница 6 |
| Страница 7 |
Одна из наиболее частых жалоб разработчиков, получавших данные из БД средствами ADO, — невозможность использования метода Recordset. UpdateBatch для передачи обновлений при помощи хранимых процедур. Как уже говорилось, DataAdapter позволяет вам определить собственную логику обновления. В приведенных ранее фрагментах кода показано, как создать собственные объекты Command, с помощью которых DataAdapter будет передавать отложенные изменения в БД. Аналогичный код годится и для передачи обновлений средствами хранимых процедур. Во-первых, в БД Northwind следует определить хранимые процедуры, позволяющие изменять, вставлять и удалять записи таблицы Order Details. Для создания процедур, которые будут вызываться в нашем коде, скопируйте и выполните следующий фрагмент кода в SQL Server Query Analyzer. Если у вас установлено только ядро MSDE и, как следствие, нет доступа к SQL Server Query Analyzer, вызовите процедуру CreateSprocs (приводится в одном из последующих фрагментов кода) и создайте нужные хранимые процедуры.
USE Northwind GO CREATE PROCEDURE spUpdateDetail (@OrderID_New int, @ProductID_New int, @Quantity_New smallint, @UnitPrice_New money, @OrderID_Orig int, @ProductID_Orig int, @Quantity_Orig smallint, @UnitPrice_Qrig money) AS UPDATE [Order Details] SET OrderlD = @OrderlD_New, ProductID = @ProductID_New, Quantity = @Quantity_New, UnitPrice = @UnitPrice_New WHERE OrderlD = @OrderID_Orlg AND ProductID = @ProductID_Orig AND Quantity = @Quantity_Orig AND UnitPrice = 3UnitPrice_Orig GO CREATE PROCEDURE spInsertDetail (@OrderID int, gProductlD int, ^Quantity smallint, ^UnitPrice money) AS INSERT INTO [Order Details] (OrderlD, ProductID, Quantity, UnitPrice) VALUES (@OrderID, 0ProductID, ^Quantity, @UnitPrice) GO CREATE PROCEDURE spDeleteDetail (@OrderID int, ^ProductID int, (Quantity smallint, cUnitPrice money) AS DELETE FROM [Order Details] WHERE OrderlD = @OrderID AND ProductID = §ProductID AND Quantity = Quantity AND UnitPrice = cUnitPrice Имея хранимые процедуры для передачи обновлений в таблицу Order Details, можно написать объекты Command, автоматически вызывающие их при вызове метода DataAdapter. Update. Следующий фрагмент кода включает функции, которые создают объекты Command, содержащие вызовы приведенных выше процедур. Кроме того, он включает процедуру для создания всех этих хранимых процедур в БД. Все, что остается сделать для передачи обновлений с помощью хранимых процедур — связать наши новые объекты Commands объектом DataAdapter. Это осуществляется в процедуре SubmitCbangesViaStoredProcedures. Visual Basic.
NET Private Sub SubmitChangesViaStoredProceduresO da. UpdateCommand = CreateUpdateViaSPComraandO da. InsertCommand = CreatelnsertViaSPCommand() da. DeleteCommand = CreateDeleteViaSPCommand() da. Update(tbl) End Sub Private Function CreateUpdateViaSPCommand() As OleDbCommand Dim cmd As New OleDbCommand("spUpdateDetail", en) cmd. CommandType = CommandType.
StoredProcedure Dim pc As OleDbParameterCollection = cmd. Parameters pc. Add("OrderlD_New", OleDbType. Integer, 0, "OrderlD") pc. Add("ProductID_New", OleDbType, Integer, 0, "ProductID") pc. Add("Quantity_New", OleDbType. Smalllnt, 0, "Quantity") pc.
Add("UnitPrice_New", OleDbType. Currency, 0, "UnitPrice") Dim param As OleDbParameter param = pc. Add("OrderID_Orig", OleDbType. Integer, 0, "OrderlD") param. SourceVersion = DataRowVersion. Original param = pc.
Основы работы с Microsoft ADO.NET
Использование поставщика данных .NET
Метео


