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

 

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

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

Сеппа Д. Microsoft ADO.NET — М.: Русская Редакция, 2003. — 640 c.
ISBN 5-7502-0223-2
Скачать (прямая ссылка): mcrsftado2003.pdf
Предыдущая << 1 .. 202 203 204 205 206 207 < 208 > 209 210 211 212 213 214 .. 260 >> Следующая

Visual Basic .NET
Добавьте в начало модуля кода следующие строки Imports Microsoft. Data. SqlXml Imports System,Xml Imports System.10
Dim strConn As String = "Provider=SQLOLEDB;" 4 _
480
Часть Автономная работа с данными: объект DataSet модели A30.NET
"Data Source=(Local)\NetSDK; " & _ "Initial Catalog=Northwind;" & . "'Trusted_Cormection=Yes: " Di^ cmd As New SqimCommarid(strConn)
Dim strPathToSchema As String = "C:\MySchema.XSD"
cmd.SchemaPath = StrPathToSchema
c»d.Coi»narMjrext = "OrderstCustomerlD- QROSR']"
cmd.CommandType = SqlXmlCommanclType .XPath
cmd.RootTag = "ROOT"
Dim da As New SqlXntlAdapter(cmd)
Dim els As New DataSetO
da.Flll{ds)
ds.Tables( "Orders'' ).Rows(0)("Customer ID") = AlKKl" ds.TablesC"0rders").Rows(1)("CustomerrD") = "ALFKI "
IDim strPathToDiffGram As String = "C:\MyDiffGram.XML"
ds.WriteXml(strPathToDiffGram, XmlWriteMode.DiffGram)
cmd = New SqlXrrilCormandistrConn)
cmd.SchemaPath = StrPathToSchema
cmd. ConwaodType = SrjlXmlCominandType. DiffGram
cmd.CommandStream = New FileStream(strPathToDiffGram,
FileMode.Open, FileAccess.Read)
cmd.ExecuteNonOuery() 'Отмен; изменений
Dim strSQL As String = "UPDATE Orders SET CustomerlD = 'GROSR' " & _
"WHERE OrderlD = 10268 OR OrderlD = 10785" cmd = New SqlXmlCommand(strConn) cmd.CommandText = strSQL cmd. CommandType = CqlXmlCommandType. Stjl cmd. ExecuteNonQueryO
Visual C# .NET
//Добавьте в начало модуля кода следующие строки using Microsoft.Data.SqlXml; using System. Ш; using System.10;
string strConn = "Provider=SQLOLEDB; Data Source=(local)\\NetSDK;" +
"Initial Catalog=Northwind;Trusted_Connection=Yes;"; SqlXmlCommand cmd = new SqlXmlContmand(strConn);
string StrPathToSchema = "C:\\MySchema.XSD"; cmd.SchemaPath = strPathToSchema; cmd.CommandText = "OrderstCustomerlD--'GFI0SR" cmd.CommandType = SqlXmlCommandType.XPath; ¦cmd.RootTag = "ROOT";
SqlXmlAdapter da = new SqlXmlAdapter(cmd);
DataSet ds = new DataSetO; da.Flll(ds);
ГЛАВА Работа с XML-данными 481
ds . Tables["Orders"] .Row:a[0]["CuStOi!iPrTD" ] = "ALFKI";
ds.Tables["Orders"].Rows[1]["CustomerID"] = "ALFKI";
string strpathToDiffGram = "C:\\HyOiffGram.XML":
ds.WriteXml(strPathToDiffGram, XmlWriteMode.DiffGram);
сто = new SqLXm]CcFnn;.4nd(strConn);
cmd. SchemaPath = et гРа'гТГГооспеию;
сто. CO:TiTiar!c!Type = SqlXmlOommandType. Dif fGram;
cflid.CommandStreain = new FileStream(strPathToDiffGram, FileHode.Open,
FileAccess.Read);
cmd. FxecuteNonQueryO; //Отмена изменений
string strSQL = "UPDATE Orders SET CustomerlD = 'GROSR' " + "WHERE OrderlD = 1026B OR OrderlD = 10785"; cmd = new SqlXmlCoiimandCstrConn); cmd.CommandText = strSQL; cmd.CommandType = SqlXnilCommandType. Sql; cmd. ExecuteNonQueryO;
Примечание Код также включает командный запрос для отмены изменений к БД, благодаря чему этот фрагмент кода можно выполнять многократно. Чтобы убедиться, что $а1Хт1Соттапа\1ере\л. \ хранящиеся в ХМЬ-доку-менте формата изменения, определите точку останова перед
выполнением последнего запроса,
Логика обновления, используемая объектом SqlXmlCommand
Прежде чем продолжить, немного поговорим о логике, генерируемой объектом SqlXmlCommand для передачи изменений в БД. Это поможет вам глубже понять преимущества и недостатки передачи обновлений с использованием постдвиыкз SQLXML .NET Data Provider.
Когда фрагмент кода вызвал метод St/lXwlOMunaMiEx<4~nh'\:<>tiQi/i?i для передачи изменений из XML-документа формата diffgram, поставщик SQLXML .NETData Provider сгенерировал и передал SQL Server следующий пакетный запрос:
SET ХАСТ ABORT ON BEGIN TRAN
DECLARE ©eip INT, @r__ int, §в__ int SET §elp = 0
UPDATE Orders SET Custra»erI?Hf'AI.FKI' WHERE [ Ortei Т0*ЮШ ) AND ( CustomsrID=N'GROSR' ) AND ( 0rder0ate=N'1996-07-30 00:00:001 ) • SELECT = ©©ERROR, ©r__ = MR0WC0UNT
IF (9e__ ! = 0 OR er_ != 1) SET @eip = 1
IF (@r__> 1) RAISERROR ( N'SOLOLEDB Error Description: Ambiguous update, unique identifier required Transaction aborted ', 16, 1)
EDSE IF (®r_< 1) RAISERROR ( N' SQDODEDB Error Description: Empty update, no updatable rows found Transaction aborted ', 16, 1)
482
Часть III Автономная работа с данными: DataSet модэпи ADO NET
UPDATE Orders SET CjstcniorID=N'ALFK[ WHERE ( 0rdBrID=10?85 ) AND ( CustomerID=N'GROSir ) AND ( OrderDate=N11997-12-18 00:00:00' ) ; SELECT ee__ = 98ERR0R, ®r_ = ©®R0WC0UNT IF (®e__ != 0 OR 3r_ i= 1) SET ®eip = 1
IF (вг__ > 1) RAISERROR С N'SQLOLEDB Error Description: Ambiguous update, unique identifier required Transaction aborted ', 16, 1)
ELSE IF (®r__ < 1) RAISERROR ( N'SQLOLEDB Error Description: Empty update, no updatable rows found Transaction aborted ', 16, 1)
IF (§81 p != 0) ROLLBACK ELSE COMMIT SET XACT.ABORT OFF
Для начала он указывает SQL Server отменить текущую транзакцию, если та иыюпе! ошибку, начинает транзакцию и определяет ряд переменных для хранения данных. Затем код выполняет первый запрос UPDATE и помещает данные в переменные, чтобы определить, есть ли ошибки и сколько записей затронул запрос. Если запрос затронул одну запись и не сгенерировал ошибку, код продолжает выполнять командные запросы и проверять, успешно ли проходит обновление. Когда все командные запросы выполнены, код при отсутствии ошибок подтверждает транзакцию и параметр, указывавший SQL Server откатить транзакцию в случае ошибки.
Предыдущая << 1 .. 202 203 204 205 206 207 < 208 > 209 210 211 212 213 214 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100