AdomdDataReader를 사용하여 데이터 검색

분석 데이터 검색 시 AdomdDataReader 개체는 오버헤드와 상호 작용 간에 적절한 균형을 맞춥니다. AdomdDataReader 개체는 분석 데이터 원본에서 정방향 및 읽기 전용의 평면화된 데이터 스트림을 검색합니다. 이 버퍼링되지 않은 데이터 스트림을 사용하면 절차적인 논리에서 분석 데이터 원본의 결과를 순차적으로 처리할 수 있습니다. 따라서 AdomdDataReader는 데이터가 메모리에 캐시되지 않기 때문에 표시를 목적으로 많은 양의 데이터를 검색할 때 유용하게 사용할 수 있습니다.

또한 AdomdDataReader는 쿼리의 전체 결과가 반환될 때까지 기다리지 않고 사용 가능한 데이터를 바로 검색하기 때문에 응용 프로그램 성능을 높일 수 있으며, 기본적으로 한 번에 한 행만 메모리에 저장하기 때문에 시스템 오버헤드도 감소합니다.

AdomdDataReader 개체는 성능을 최적화하지만 검색된 데이터에 대해 제공하는 정보량이 다른 데이터 검색 메서드보다 적습니다. AdomdDataReader 개체는 데이터 또는 메타데이터를 나타내기 위한 큰 개체 모델을 지원하지 않으며 이 개체 모델에는 셀 쓰기 저장(writeback)과 같이 복잡한 분석 기능도 사용할 수 없습니다. 하지만 AdomdDataReader 개체는 셀 집합 데이터를 검색하는 강력한 형식의 메서드 집합과 셀 집합 메타데이터를 테이블 형식으로 검색하는 메서드를 제공합니다. 또한 AdomdDataReader는 SelectCommand 메서드를 사용하여 Microsoft .NET Framework 클래스 라이브러리의 System.Data 네임스페이스에서 데이터를 검색하는 기능과 데이터 바인딩을 지원하는 IDbDataReader 인터페이스를 구현합니다.

AdomdDataReader에서 데이터 검색

AdomdDataReader 개체를 사용하여 데이터를 검색하려면 다음 단계를 수행하십시오.

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

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

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

    명령에서 쿼리가 실행되면 ADOMD.NET은 AdomdDataReader 개체에 대한 데이터를 평면화할 수 있도록 XML for Analysis 사양에 설명된 테이블 형식인 Resultset 형식으로 결과를 반환합니다. 테이블 형식은 분석 데이터의 일정하지 않은 차원 때문에 분석 데이터 쿼리에는 잘 사용되지 않습니다.

    다음 메서드 중 하나를 사용하여 테이블 형식의 결과를 요청할 때까지 ADOMD.NET은 클라이언트의 네트워크 버퍼에 결과를 저장합니다.

    • AdomdDataReader 개체의 Read 메서드를 호출합니다.

      Read 메서드는 쿼리 결과에서 행을 가져옵니다. 그러면 다음 열의 이름 또는 서수 참조를 Item 속성에 전달하여 반환된 행의 각 열에 액세스할 수 있습니다. 예를 들어 현재 행의 첫째 열 이름이 ColumnName인 경우 reader[0].ToString() 또는 reader["ColumnName"].ToString()은 현재 행의 첫째 열에 있는 내용을 반환합니다.

    • 형식화된 접근자 메서드 중 하나를 호출합니다.

      AdomdDataReader에서 제공하는 일련의 형식화된 접근자 메서드를 사용하여 네이티브 데이터 형식으로 열 값에 액세스할 수 있습니다. 열 값의 기본 데이터 형식을 알고 있으면 형식화된 접근자 메서드에서 열 값을 검색할 때 수행해야 하는 형식 변환이 줄기 때문에 최고의 높은 성능을 얻을 수 있습니다.

      사용할 수 있는 형식화된 접근자 메서드로는 GetDateTime, GetDouble, GetInt32 등이 있습니다. 형식화된 접근자 메서드의 전체 목록은 AdomdDataReader를 참조하십시오.

  3. 판독기를 닫습니다.

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

AdomdDataReader에서 데이터 검색 예

다음 코드 예제에서는 AdomdDataReader 개체를 반복한 후 각 행의 처음 두 값을 문자열로 반환합니다.

If Reader.HasRows Then
    Do While objReader.Read()
        Console.WriteLine(vbTab & "{0}" & vbTab & "{1}", _
            objReader.GetString(0), objReader.GetString(1))
    Loop
Else
  Console.WriteLine("No rows returned.")
End If

objReader.Close()
if (objReader.HasRows)
  while (objReader.Read())
    Console.WriteLine("\t{0}\t{1}", _
        objReader.GetString(0), objReader.GetString(1));
else
  Console.WriteLine("No rows returned.");

objReader.Close();

AdomdDataReader에서 메타데이터 검색

AdomdDataReader 개체의 인스턴스가 열려 있는 동안 GetSchemaTable 메서드를 사용하여 현재 레코드 집합에 대한 스키마 정보 또는 메타데이터를 검색할 수 있습니다. GetSchemaTable은 현재 레코드 집합에 대한 스키마 정보로 채워진 DataTable 개체를 반환합니다. DataTable은 레코드 집합의 열마다 행을 하나씩 포함합니다. 스키마 테이블 행의 각 열은 셀 집합에서 반환된 열의 속성에 매핑됩니다. 여기서 ColumnName은 속성의 이름이며, 열의 값은 속성의 값입니다.

AdomdDataReader에서 메타데이터 검색 예

다음 코드 예제에서는 AdomdDataReader 개체에 대한 스키마 정보를 작성합니다.

Dim schemaTable As DataTable = objReader.GetSchemaTable()

Dim objRow As DataRow
Dim objColumn As DataColumn

For Each objRow In schemaTable.Rows
  For Each objColumn In schemaTable.Columns
    Console.WriteLine(objColumn.ColumnName & " = " & objRow(objColumn).ToString())
  Next
  Console.WriteLine()
Next
DataTable schemaTable = objReader.GetSchemaTable();
foreach (DataRow objRow in schemaTable.Rows)
{
  foreach (DataColumn objColumn in schemaTable.Columns)
    Console.WriteLine(objColumn.ColumnName + " = " + objRow[objColumn]);
  Console.WriteLine();
}

다중 결과 집합 검색

데이터 마이닝은 ADOMD.NET에서 중첩 행 집합으로 표시되는 중첩 테이블이라는 개념을 지원합니다. 각 행에 연결된 중첩 행 집합을 검색하려면 GetDataReader 메서드를 호출합니다.

참고 항목

참조

분석 데이터 원본에서 데이터 검색

CellSet을 사용하여 데이터 검색

XmlReader를 사용하여 데이터 검색