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
Его можно открыть при помощи объектной модели 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.