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

 

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

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

Сеппа Д. Microsoft ADO.NET — М.: Русская Редакция, 2003. — 640 c.
ISBN 5-7502-0223-2
Скачать (прямая ссылка): mcrsftado2003.pdf
Предыдущая << 1 .. 148 149 150 151 152 153 < 154 > 155 156 157 158 159 160 .. 260 >> Следующая

Рис. 10-1. Содержимое заказа в БД Northwind
Из главы 5 вы знаете, как поместить результаты запроса в объект DataSet. Используя эти знания, вы без труда создадите приложение, выбирающее заказы клиентов в объекты DataSet. А еслонх^алез на материалах главы 6, сумеете сделать так, чтобы приложение изменяло содержимое объекта DataSet в соответствии с инструкциями пользователя. Но, как я уже говорил, изменение содержимого DataSet не отражается на соответствующих записях БД.
В главе 5 я рассказал о том, что объект DataAdapter предоставляет метод [р<ине. позволяющий передавать в БД отложенные изменения. Таким образом, можно создать приложение, передающее изменения в составе заказа при помощи следующего кода:
Visual Basic NET
'Выбираем содержимое заказа в объект DataTable Dim strConn, strSQL As String
strConn = "Provider=SQLOLEDB;Data Source=(local)\NetSDK;" & _ "Initial Catalog=Northwind; Trusted J^nnection=Yes;"
strSQL = "SELECT OrderlD, ProductlD, Quantity, UnitPrice " &
"FROM [Order Details] WHEHE OrderlD = 10503 " & _
"ORDER BY ProductID" Dim da Ks New 01eDbDataAdapter(strSOL, strConn) Dim tbl As New DataTable{"Order Details")
348
Часть III Автономная работа с данными: объект DataSet модели ADO.NET
da.Fill(tbl)
заказа
tbl.Rows(O).Delete()
tbl.Rows( 1 )('• Quantity"} = CShort(tbl.Rows(l)("Quantity")) * 2 tbl,Rows.Add(New ObjectO {10503, 1, 24, 18})
Передаем отложенные изменения Try
da.Update(tbl)
Console.Writeline<"Successfully submitted new changes") Catch ex As Exception
Console. WriteLineC'Call to DataAdapter. update " & _
"threw exception:" & vbCrLf & ex.Message)
End Try
Visual C# .NET
.//Выбирай»' содержимое заказа в объект DataTable string strConn, strSOL;
strConn = "Provider=SQLOLEDB;Data Source=(local)\\NetSDK;" +
"Initial Catalog=Northwind;Trusted_Connection=Yes;"; strSQL = "SELECT OrderlD, ProduotID, Quantity, UnitPrice " +
"FROM [Order Details] WHERE OrderlD = 10503 +
"ORDER BY ProductID"; OleDbDataAdapter da = new 01eDbDataAdapter(strSQL, strConn); DataTable tbl = new DataTableC"Order Details"); da.Fill(tbl);
содержимое заказа tbl.Rows[0],Delete{);
tbl.Rows[i]["Quantity"] = • (tbl.fiowsClir'Quantity'"}) - 2; tbl.Rows.Add(new {10503, 1, 24, 18});
изменения
try <
da.Update(tol);
submitted new
1
catch (Exception ex) ;
Console.WriteLine("Call to DataAdapter.Update threw exoeption:\n" + ex.Message):
\
Данный код успешно компилируется, но не способен успешно передать в БД изменения в составе заказа. Вместо передачи изменений ADO.NET сгенерирует исключение, гласящее: «Update requires a valid DeleteCommand when passed DataRow collection with deleted rows* («Методу Update, принявшему набор DataRow с удаленными записями, необходим корректный объект DeleteCommand*).
ГЛАВА 10 Передача обновлений в базу данных
349
На этапе тес7ир<;яг>:ия бета-версии Microsoft .NF.T Framework такие исключения путали многих разработчиков. Предыдущие технологии доступа к данным, например ADO, включали функции, позволявшие автоматически передавать изменения. В ADO.NET передавать изменения разрешается средствами объекта Data-Adapter, однако по умолчанию он не содержит необходимой для этого логики.
Так как же добавить в объект DataAdapterADO.NET логику передачи изменений? Есть три способа: написать собственный код, указать ADO.NET сгенерировать логику обновления за вас или воспользоваться утилитой генерирования кода, например мастером DataAdapter Configuration Wizard из состава Visual Studio.NET.
Я сейчас познакомлю вас с сутью, а также с преимуществами и недостатками этих трех способов.
Урок истории
чем обсуждать передачу обновлений средствами ADO.NET, рассмотрим,
как она осуществлялась в технологии, предшествовавшей ADO.NET, — ADO. В отличие от ADO.NET, ADO автоматически генерирует логику обновления. Я вкратце расскажу, как ядро курсоров ADO передает изменения, чтобы вы
поняли, как и почему команда ADO.NET выбрала другой путь и подталкивает программистов к написанию собственной логики обновления. Зная, как ядро курсоров ADO передает изменения, вам будет проще понять, как генерировать собственную логику обновления в ADO.NET.
Ядро курсоров ADO поддерживает функциональность, аналогичную возможностям объекта ВвШ® ADO.NET. Клиентский объект Recordset ADO можно использовать в качестве автономного кэша данных. Кроме итя. объект Recordset — это механизм ADO для передачи обновлений в БД.
Следующий фрагмент кода выбирает содержимое обсуждавшегося выше заказа, изменяет это содержимое и затем передает отложенные изменения в БД:
«Классический» Visual Basic и ADO 2.x
Dim strConn As String, strSOL As String
strConn = "PrDvider=SQLOLEDB;Data Source={local)\NetSDK; " &_ "Initial Catalog=Northwind;Trusted„Connection=Yes; " istrSQL = "SELECT OrderlD, ProductID, Ouantity, UnitPrice " & _
"FROM [Order Details] WHERE OrderlD = 10503 " & _ "ORDER BY ProductID"
Dim As ADOM. Recordset Set rs = New AOODB.Recordset rs.CursorLocation = aduseClient
rs.Open strSQL, strConn, adOpenStatic, adLockBatchOptimlstic,
Предыдущая << 1 .. 148 149 150 151 152 153 < 154 > 155 156 157 158 159 160 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100