XmlReader를 사용하여 데이터 검색

XmlReader 클래스는 Microsoft .NET Framework 클래스 라이브러리의 System.Xml 네임스페이스에 포함되어 있으며 빠르고 캐시되지 않는 정방향 전용 데이터 액세스를 제공한다는 점에서 AdomdDataReader 클래스와 비슷합니다. CellSet 개체를 사용하는 데이터의 메모리 내 분석 뷰가 필요 없는 경우 대량의 XML 데이터를 검색하는 데는 XmlReader 개체가 가장 적합합니다. XmlReader는 데이터를 스트리밍하므로 CellSet 개체를 사용하여 XML for Analysis 응답을 분석 개체 모델 표현으로 변환할 때처럼 XmlReader에서 데이터를 호출자에게 제공하기 전에 모든 데이터를 검색 및 캐시할 필요가 없습니다.

XmlReader 클래스를 사용하면 AdomdCommand 개체의 ExecuteXmlReader 메서드가 호출될 때 ADOMD.NET에서 받은 XML for Analysis 응답에 직접 액세스할 수 있습니다. 검색된 데이터는 원시 XML이므로 데이터와 메타데이터를 수동으로 구문 분석해야 합니다. 또한 데이터가 검색되는 즉시 XmlReader 개체를 닫아야 합니다.

데이터 및 메타데이터 검색

XmlReader 클래스를 사용하여 데이터를 검색하려면 다음 단계를 수행하십시오.

  1. 개체의 새 인스턴스를 만듭니다.

    XmlReader 클래스의 새 인스턴스를 만들려면 AdomdCommand 개체의 Execute 또는 ExecuteXmlReader 메서드를 호출합니다.

  2. 데이터를 검색합니다.

    명령을 통해 쿼리를 실행하고 XmlReader를 반환한 후에는 데이터와 메타데이터를 구문 분석해야 합니다. XML 데이터 및 메타데이터는 XML for Analysis 공급자에서 사용되는 네이티브 형식으로 표현됩니다. 대부분의 XML for Analysis 공급자에서 사용되는 네이티브 형식은 MDDataSet 형식입니다. MDDataSet 형식은 셀 집합의 데이터와 메타데이터를 모두 적절한 구조의 형식으로 제공합니다. MDDataSet 형식에 대한 자세한 내용은 XML for Analysis 사양을 참조하십시오.

  3. 판독기를 닫습니다.

    XmlReader 개체의 사용을 마친 후에는 항상 Close 메서드를 호출해야 합니다. XmlReader가 열려 있으면 해당 XmlReader는 명령을 실행하는 데 사용된 AdomdConnection 개체를 배타적으로 사용합니다. 원래 XmlReader를 닫기 전까지는 다른 XmlReader 또는 AdomdDataReader를 만드는 명령을 포함하여 해당 AdomdConnection을 사용하는 어떤 명령도 실행할 수 없습니다.

XmlReader에서의 데이터 검색 예

다음 예에서는 명령을 실행하고 데이터를 XmlReader로 검색한 다음 파일 내용을 콘솔에 출력합니다.

        void OutputDataWithXML()
        {
            //Open a connection to the local server.
            AdomdConnection conn = new AdomdConnection("Data Source=localhost");
            conn.Open();

            //Create a command to retrieve the data.
            AdomdCommand cmd = new AdomdCommand(@"WITH MEMBER [Measures].[FreightCostPerOrder] AS 
[Measures].[Reseller Freight Cost]/[Measures].[Reseller Order Quantity],  
FORMAT_STRING = 'Currency'

SELECT [Geography].[Geography].[Country].&[United States].Children ON ROWS, 
[Date].[Calendar].[Calendar Year] ON COLUMNS
FROM [Adventure Works]
WHERE [Measures].[FreightCostPerOrder]", conn);

            //Execute the command, retrieving an XmlReader.
            System.Xml.XmlReader reader = cmd.ExecuteXmlReader();

            //Do something with the reader: Parse data, Parse metadata,
            //                              Save for later loading into CellSet, etc.
            Console.WriteLine(reader.ReadOuterXml());

            //Close the reader, then the connection
            reader.Close();
            conn.Close();

            //Await user input.
            Console.ReadLine();
        }