Впервые возможность сохранять (есть еще замечательное слово "персистить") результаты запроса в виде 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.
|
|