Страница 2 из 15
Сохранить как XML Впервые возможность сохранять (есть еще замечательное слово "персистить") результаты запроса в виде XML появилась в ADO 2.1 (1999 г.) До этого в ADO 2.0 объект Recordset сохранялся только в частном бинарном формате ADTG (Advanced Data TableGram), который использовался для передачи recordset'a при удаленном доступе с помощью RDS. В Скрипте 1 мы "отперсистили" в XML результат выполнения запроса (ADOшный Recordset). static void Save_ADODBRecordset_XMLFile() { ADODB.ConnectionClass cnn = new ADODB.ConnectionClass(); cnn.Open("Provider=SQLOLEDB;Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI", "", "", (int)ADODB.ConnectOptionEnum.adConnectUnspecified); ADODB.Recordset rst; Object RecsAffected = new Object(); rst = cnn.Execute("SELECT c.ContactName, c.ContactTitle, o.OrderDate " + "FROM Customers c INNER JOIN Orders o ON c.CustomerID = o.CustomerID", out RecsAffected, (int)ADODB.ExecuteOptionEnum.adOptionUnspecified); FileInfo f = new FileInfo("..\\Results\\ADODBRecordset_XMLFile.xml"); if (f.Exists) f.Delete(); rst.Save(f.FullName, ADODB.PersistFormatEnum.adPersistXML); cnn.Close(); Process.Start("iexplore.exe", f.FullName); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(f.FullName); Console.WriteLine("Кол-во заказов, сделанных данным клиентом = {0}", xmlDoc.SelectNodes(".//*[@ContactName='Maria Larsson']").Count); } Скрипт 1 Получается действительно нормальный XML, как видно на Рис.1. - <xml xmlns:s=" uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882 " xmlns:rs=" urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"> + <s:Schema id ="RowsetSchema"> - <rs:data > <z:row ContactName=" Paul Henriot" ContactTitle=" Accounting Manager" OrderDate ="1996-07-04T00:00:00"/> <z:row ContactName=" Karin Josephs" ContactTitle=" Marketing Manager" OrderDate ="1996-07-05T00:00:00"/> <z:row ContactName=" Mario Pontes" ContactTitle=" Accounting Manager" OrderDate font color=blue>="1996-07-08T00:00:00"/> ... </rs:data> </xml> Рис.1 Его можно открыть при помощи объектной модели DOM, выполнить XPath-запрос, возвращающий узлы заказов, сделанные клиентом по имени Maria Larsson, и другие подобающие XML действия. Что-то можно заложить в первоначальный SQL-запрос: SELECT count(1) FROM Customers c INNER JOIN Orders o ON c.CustomerID = o.CustomerID WHERE c. ContactName = 'Maria Larsson' но согласитесь, чтобы показать работу с сохраненным recordset'ом как с XML, часть работы для приличия надо проделать средствами XPath, а не SQL. По соображениям экономии места данный пример, как и все последующие, написаны на C#. Обратите внимание, что в нем используется не ADO.Net, а классическая объектная модель ADO (2.7). Для нее не требуется делать tlbimp из библиотек классов в ... \Program Files\Common Files\System\ado, потому что соответствующая обертка существует изначально как Primary Interop Assembly. |