다음을 통해 공유


연습: 서버의 통합 문서에서 캐시된 데이터 검색

이 연습에서는 ServerDocument 클래스를 사용하여 Microsoft Office Excel을 시작하지 않고도 Excel 통합 문서에 캐시된 데이터 집합에서 데이터를 검색하는 방법을 보여 줍니다. 이 연습에서는 방법: 서버에 있는 통합 문서에서 캐시된 데이터 검색에 제공된 코드 예제를 사용하는 방법을 단계별로 설명합니다.

적용 대상: 이 항목의 정보는 Excel 2007 및 Excel 2010의 문서 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.

이 연습에서는 다음 작업을 수행합니다.

  • AdventureWorksLT 데이터베이스에서 가져온 데이터를 포함하는 데이터 집합 정의

  • Excel 통합 문서 프로젝트 및 콘솔 응용 프로그램 프로젝트에서 데이터 집합 인스턴스 만들기

  • 통합 문서의 데이터 집합에 바인딩된 ListObject 만들기 및 통합 문서가 열릴 때 ListObject에 데이터 채우기

  • 데이터 캐시에 통합 문서의 데이터 집합 추가

  • Excel을 시작하지 않고 캐시된 데이터 집합의 데이터를 콘솔 응용 프로그램의 데이터 집합으로 읽어 들이기

이 연습에서는 개발 컴퓨터에서 코드를 실행하는 것으로 가정하지만 연습에서 소개하는 코드를 Excel이 설치되지 않은 서버에서 사용할 수도 있습니다.

참고

일부 Visual Studio 사용자 인터페이스 요소의 경우 다음 지침에 설명된 것과 다른 이름 또는 위치가 시스템에 표시될 수 있습니다. 설치한 Visual Studio 버전과 사용하는 설정에 따라 이러한 요소가 결정됩니다. 자세한 내용은 설정에 대한 작업을 참조하십시오.

사전 요구 사항

이 연습을 완료하려면 다음 구성 요소가 필요합니다.

-

Microsoft Office 개발자 도구를 포함하는 Visual Studio 2010 버전입니다. 자세한 내용은 [Office 솔루션을 개발할 수 있도록 컴퓨터 구성](bb398242\(v=vs.100\).md)을 참조하십시오.
  • Excel 2007 또는 Excel 2010

  • AdventureWorksLT 샘플 데이터베이스가 연결되어 있는 Microsoft SQL Server 또는 Microsoft SQL Server Express의 실행 중인 인스턴스에 대한 액세스 권한. AdventureWorksLT 데이터베이스는 CodePlex 웹 사이트에서 다운로드할 수 있습니다. 데이터베이스 연결에 대한 자세한 내용은 다음 항목을 참조하십시오.

데이터 집합을 정의하는 클래스 라이브러리 프로젝트 만들기

Excel 통합 문서 프로젝트와 콘솔 응용 프로그램에서 같은 데이터 집합을 사용하려면 두 프로젝트에서 모두 참조되는 별도의 어셈블리에 데이터 집합을 정의해야 합니다. 이 연습에서는 클래스 라이브러리 프로젝트에서 데이터 집합을 정의합니다.

클래스 라이브러리 프로젝트를 만들려면

  1. Visual Studio를 시작합니다.

  2. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.

  3. 템플릿 창에서 Visual C# 또는 Visual Basic을 확장한 다음 을 클릭합니다.

  4. 프로젝트 템플릿 목록에서 클래스 라이브러리를 선택합니다.

  5. 이름 상자에 AdventureWorksDataSet을 입력합니다.

  6. 찾아보기를 클릭하여 %UserProfile%\My Documents(Windows XP 또는 이전 버전의 경우) 또는 %UserProfile%\Documents(Windows Vista의 경우) 폴더로 이동한 다음 폴더 선택을 클릭합니다.

  7. 새 프로젝트 대화 상자에서 솔루션용 디렉터리 만들기 확인란이 선택되어 있지 않은지 확인합니다.

  8. 확인을 클릭합니다.

    Visual Studio에서 솔루션 탐색기AdventureWorksDataSet 프로젝트가 추가되고 Class1.cs 또는 Class1.vb 코드 파일이 열립니다.

  9. 솔루션 탐색기에서 Class1.cs 또는 Class1.vb를 마우스 오른쪽 단추로 클릭한 다음 삭제를 클릭합니다. 이 연습에서는 이러한 파일이 필요하지 않습니다.

클래스 라이브러리 프로젝트에서 데이터 집합 정의

SQL Server 2005의 AdventureWorksLT 데이터베이스에서 가져온 데이터를 포함하는 형식화된 데이터 집합을 정의합니다. 이 연습의 뒷부분에서는 Excel 통합 문서 프로젝트와 콘솔 응용 프로그램 프로젝트에서 이 데이터 집합을 참조하게 됩니다.

이 데이터 집합은 AdventureWorksLT 데이터베이스의 Product 테이블에 있는 데이터를 나타내는 형식화된 데이터 집합입니다. 형식화된 데이터 집합에 대한 자세한 내용은 Visual Studio에서 데이터 집합 작업를 참조하십시오.

클래스 라이브러리 프로젝트에서 형식화된 데이터 집합을 정의하려면

  1. 솔루션 탐색기에서 AdventureWorksDataSet 프로젝트를 클릭합니다.

  2. 데이터 메뉴에서 새 데이터 소스 추가를 클릭합니다.

    데이터 소스 구성 마법사가 열립니다.

  3. 데이터베이스를 클릭하고 다음을 클릭합니다.

  4. AdventureWorksLT 데이터베이스에 대한 기존 연결이 있으면 해당 연결을 선택하고 다음을 클릭합니다.

    그렇지 않으면 새 연결을 클릭하고 연결 추가 대화 상자에서 새 연결을 만듭니다. 자세한 내용은 방법: 데이터베이스의 데이터에 연결을 참조하십시오.

  5. Save the Connection String to the Application Configuration File 페이지에서 Next을 클릭합니다.

  6. 데이터베이스 개체 선택 페이지에서 테이블을 확장한 다음 **Product (SalesLT)**를 선택합니다.

  7. 마침을 클릭합니다.

    AdventureWorksDataSet 프로젝트에 AdventureWorksLTDataSet.xsd 파일이 추가됩니다. 이 파일은 다음 항목을 정의합니다.

    • 이름이 AdventureWorksLTDataSet인 형식화된 데이터 집합. 이 데이터 집합은 AdventureWorksLT 데이터베이스의 Product 테이블에 있는 콘텐츠를 나타냅니다.

    • 이름이 ProductTableAdapter인 TableAdapter. 이 TableAdapter는 AdventureWorksLTDataSet에서 데이터를 읽고 쓰는 데 사용할 수 있습니다. 자세한 내용은 TableAdapter 개요를 참조하십시오.

    이 연습의 뒷부분에서 이들 개체를 모두 사용하게 됩니다.

  8. 솔루션 탐색기에서 AdventureWorksDataSet을 마우스 오른쪽 단추로 클릭하고 빌드를 클릭합니다.

    프로젝트가 오류 없이 빌드되는지 확인합니다.

Excel 통합 문서 프로젝트 만들기

데이터에 대한 인터페이스를 구현하는 Excel 통합 문서 프로젝트를 만듭니다. 이 연습의 뒷부분에서 데이터를 표시하는 ListObject를 만들고 통합 문서의 데이터 캐시에 데이터 집합의 인스턴스를 추가하게 됩니다.

Excel 통합 문서 프로젝트를 만들려면

  1. 솔루션 탐색기에서 AdventureWorksDataSet 솔루션을 마우스 오른쪽 단추로 클릭하고 추가를 가리킨 다음 새 프로젝트를 클릭합니다.

  2. 템플릿 창에서 Visual C# 또는 Visual Basic을 확장한 다음 Office를 확장합니다.

  3. 확장된 Office 노드에서 2007 또는 2010 노드를 선택합니다.

  4. 프로젝트 템플릿 목록에서 Excel 통합 문서 프로젝트를 선택합니다.

  5. 이름 상자에 AdventureWorksReport를 입력합니다. 위치를 수정하지 마십시오.

  6. 확인을 클릭합니다.

    Visual Studio Tools for Office 프로젝트 마법사가 열립니다.

  7. 새 문서 만들기를 선택하고 확인을 클릭합니다.

    Visual Studio의 디자이너에서 AdventureWorksReport 통합 문서가 열리고 솔루션 탐색기AdventureWorksReport 프로젝트가 추가됩니다.

Excel 통합 문서 프로젝트의 데이터 소스에 데이터 집합 추가

Excel 통합 문서에 데이터 집합을 표시하려면 먼저 Excel 통합 문서 프로젝트의 데이터 소스에 데이터 집합을 추가해야 합니다.

Excel 통합 문서 프로젝트의 데이터 소스에 데이터 집합을 추가하려면

  1. 솔루션 탐색기AdventureWorksReport 프로젝트에서 Sheet1.cs 또는 Sheet1.vb를 두 번 클릭합니다.

    통합 문서가 디자이너에서 열립니다.

  2. 데이터 메뉴에서 새 데이터 소스 추가를 클릭합니다.

    데이터 소스 구성 마법사가 열립니다.

  3. 개체를 클릭하고 다음을 클릭합니다.

  4. 바인딩할 개체 선택 페이지에서 참조 추가를 클릭합니다.

  5. 프로젝트 탭에서 AdventureWorksDataSet을 클릭한 다음 확인을 클릭합니다.

  6. AdventureWorksDataSet 어셈블리의 AdventureWorksDataSet 네임스페이스에서 AdventureWorksLTDataSet을 클릭한 다음 마침을 클릭합니다.

    데이터 소스 창이 열리고 데이터 소스 목록에 AdventureWorksLTDataSet이 추가됩니다.

데이터 집합의 인스턴스에 바인딩된 ListObject 만들기

통합 문서에서 데이터 집합을 표시하려면 해당 데이터 집합의 인스턴스에 바인딩된 ListObject를 만듭니다. 컨트롤을 데이터에 바인딩하는 방법에 대한 자세한 내용은 Office 솔루션의 컨트롤에 데이터 바인딩을 참조하십시오.

데이터 집합의 인스턴스에 바인딩된 ListObject를 만들려면

  1. 데이터 소스 창의 AdventureWorksDataSet에서 AdventureWorksLTDataSet 노드를 확장합니다.

  2. Product 노드를 선택하면 나타나는 드롭다운 화살표를 클릭하고 드롭다운 목록에서 ListObject를 선택합니다.

    드롭다운 화살표가 표시되지 않으면 디자이너에 통합 문서가 열려 있는지 확인합니다.

  3. Product 테이블을 A1 셀에 끌어 놓습니다.

    productListObject라는 ListObject 컨트롤이 워크시트에 A1 셀부터 만들어집니다. 이와 함께 adventureWorksLTDataSet이라는 데이터 집합 개체와 productBindingSource라는 BindingSource가 프로젝트에 추가됩니다. ListObjectBindingSource에 바인딩되고, 이는 다시 데이터 집합 개체에 바인딩됩니다.

데이터 캐시에 데이터 집합 추가

Excel 통합 문서 프로젝트의 외부에 있는 코드에서 통합 문서의 데이터 집합에 액세스할 수 있도록 하려면 데이터 집합을 데이터 캐시에 추가해야 합니다. 데이터 캐시에 대한 자세한 내용은 문서 수준 사용자 지정의 캐시된 데이터데이터 캐싱을 참조하십시오.

데이터 캐시에 데이터 집합을 추가하려면

  1. 디자이너에서 adventureWorksLTDataSet을 클릭합니다.

  2. 속성 창에서 Modifiers 속성을 Public으로 설정합니다.

  3. CacheInDocument 속성을 True로 설정합니다.

통합 문서의 데이터 집합 초기화

콘솔 응용 프로그램을 사용하여 캐시된 데이터 집합에서 데이터를 검색하려면 먼저 캐시된 데이터 집합에 데이터를 채워야 합니다.

통합 문서의 데이터 집합을 초기화하려면

  1. 솔루션 탐색기에서 Sheet1.cs 또는 Sheet1.vb 파일을 마우스 오른쪽 단추로 클릭하고 코드 보기를 클릭합니다.

  2. Sheet1_Startup 이벤트 처리기를 다음 코드로 바꿉니다. 이 코드에서는 캐시된 데이터 집합이 현재 비어 있는 경우 AdventureWorksDataSet 프로젝트에 정의된 ProductTableAdapter 클래스의 인스턴스를 사용하여 에 이 데이터 집합에 데이터를 채웁니다.

    Private ProductTableAdapter As New  _
        AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter()
    
    Private Sub Sheet1_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup
        If Me.NeedsFill("AdventureWorksLTDataSet") Then
            Me.ProductTableAdapter.Fill(Me.AdventureWorksLTDataSet.Product)
        End If
    End Sub
    
    private AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter productTableAdapter =
        new AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter();
    
    private void Sheet1_Startup(object sender, System.EventArgs e)
    {
        if (this.NeedsFill("adventureWorksLTDataSet"))
        {
            this.productTableAdapter.Fill(this.adventureWorksLTDataSet.Product);
        }
    }
    

검사점

Excel 통합 문서 프로젝트를 빌드한 후 실행하여 오류 없이 컴파일 및 실행되는지 확인합니다. 또한 이 작업을 통해 캐시된 데이터 집합을 채우고 통합 문서에 데이터를 저장합니다.

프로젝트를 빌드하여 실행하려면

  1. 솔루션 탐색기에서 AdventureWorksReport 프로젝트를 마우스 오른쪽 단추로 클릭하고 디버그를 선택한 다음 새 인스턴스 시작을 클릭합니다.

    프로젝트가 빌드되고 Excel에서 통합 문서가 열립니다. 다음을 확인합니다.

    • ListObject에 데이터가 채워져 있는지 확인합니다.

    • ListObject의 첫 번째 행에 대한 ListPrice 열의 값이 1431.5인지 확인합니다. 이 연습의 뒷부분에서는 콘솔 응용 프로그램을 사용하여 ListPrice 열의 값을 수정하게 됩니다.

  2. 통합 문서를 저장합니다. 파일 이름이나 통합 문서의 위치를 수정하지 마십시오.

  3. Excel을 닫습니다.

콘솔 응용 프로그램 프로젝트 만들기

통합 문서의 캐시된 데이터 집합에 있는 데이터를 수정하는 데 사용할 콘솔 응용 프로그램 프로젝트를 만듭니다.

콘솔 응용 프로그램 프로젝트를 만들려면

  1. 솔루션 탐색기에서 AdventureWorksDataSet 솔루션을 마우스 오른쪽 단추로 클릭하고 추가를 가리킨 다음 새 프로젝트를 클릭합니다.

  2. 프로젝트 형식 창에서 Visual C# 또는 Visual Basic을 확장한 다음 Windows를 클릭합니다.

  3. 템플릿 창에서 콘솔 응용 프로그램을 선택합니다.

  4. 이름 상자에 DataReader를 입력합니다. 위치를 수정하지 마십시오.

  5. 확인을 클릭합니다.

    Visual Studio에서 솔루션 탐색기DataReader 프로젝트가 추가되고 Program.cs 또는 Module1.vb 코드 파일이 열립니다.

콘솔 응용 프로그램을 사용하여 캐시된 데이터 집합에서 데이터 검색

콘솔 응용 프로그램에서 ServerDocument 클래스를 사용하여 데이터를 로컬 AdventureWorksLTDataSet 개체로 읽어 들입니다. 로컬 데이터 집합이 캐시된 데이터 집합의 데이터로 초기화되었는지 확인하기 위해 응용 프로그램에서는 로컬 데이터 집합의 행 수를 표시합니다.

캐시된 데이터 집합에서 데이터를 검색하려면

  1. 솔루션 탐색기에서 DataReader 프로젝트를 마우스 오른쪽 단추로 클릭하고 참조 추가를 클릭합니다.

  2. .NET 탭에서 Microsoft.VisualStudio.Tools.Applications.ServerDocument(DataReader 프로젝트가 .NET Framework 4를 대상으로 하는 경우) 또는 Microsoft.VisualStudio.Tools.Applications.ServerDocument.v10.0(DataReader 프로젝트가 .NET Framework 3.5를 대상으로 하는 경우)을 선택합니다.

  3. 확인을 클릭합니다.

  4. 솔루션 탐색기에서 DataReader 프로젝트를 마우스 오른쪽 단추로 클릭하고 참조 추가를 클릭합니다.

  5. 프로젝트 탭에서 AdventureWorksDataSet을 선택하고 확인을 클릭합니다.

  6. 코드 편집기에서 Program.cs 또는 Module1.vb 파일을 엽니다.

  7. 코드 파일의 맨 위에 다음 using(C#의 경우) 또는 Imports(Visual Basic의 경우) 문을 추가합니다.

    Imports Microsoft.VisualStudio.Tools.Applications
    
    using Microsoft.VisualStudio.Tools.Applications;
    
  8. Main 메서드에 다음 코드를 추가합니다. 이 코드는 다음 개체를 선언합니다.

    • AdventureWorksDataSet 프로젝트에 정의된 AdventureWorksLTDataSet 형식의 인스턴스

    • AdventureWorksReport 프로젝트의 빌드 폴더에 있는 AdventureWorksReport 통합 문서의 경로

    • 통합 문서의 데이터 캐시에 액세스하는 데 사용할 ServerDocument 개체

      참고

      다음 코드에서는 .xlsx 확장명을 사용하여 통합 문서를 저장했다고 가정합니다. 프로젝트의 통합 문서가 다른 확장명을 사용하는 경우에는 경로를 필요한 대로 수정하십시오.

    Dim productDataSet As New AdventureWorksDataSet.AdventureWorksLTDataSet()
    Dim workbookPath As String = System.Environment.GetFolderPath( _
        Environment.SpecialFolder.MyDocuments) & _
        "\AdventureWorksReport\bin\Debug\AdventureWorksReport.xlsx"
    Dim serverDocument1 As ServerDocument = Nothing
    
    AdventureWorksDataSet.AdventureWorksLTDataSet productDataSet =
        new AdventureWorksDataSet.AdventureWorksLTDataSet();
    string workbookPath = System.Environment.GetFolderPath(
        Environment.SpecialFolder.MyDocuments) +
        @"\AdventureWorksReport\bin\Debug\AdventureWorksReport.xlsx";
    ServerDocument serverDocument1 = null;
    
  9. 이전 단계에서 추가한 코드 뒤에 있는 Main 메서드에 다음 코드를 추가합니다. 이 코드는 다음 작업을 수행합니다.

    • ServerDocument 클래스의 CachedData 속성을 사용하여 통합 문서에서 캐시된 데이터 집합에 액세스합니다.

    • 캐시된 데이터 집합의 데이터를 로컬 데이터 집합으로 읽어 들입니다.

    • 로컬 데이터 집합의 행 수를 표시하여 데이터가 있는지 확인합니다.

    Try
        serverDocument1 = New ServerDocument(workbookPath)
        Dim dataHostItem1 As CachedDataHostItem = _
            serverDocument1.CachedData.HostItems("AdventureWorksReport.Sheet1")
        Dim dataItem1 As CachedDataItem = dataHostItem1.CachedData("AdventureWorksLTDataSet")
    
        If dataItem1 IsNot Nothing Then
            Console.WriteLine("Before reading data from the cache dataset, the local dataset has " & _
                "{0} rows.", productDataSet.Product.Rows.Count.ToString())
    
            ' Read the cached data from the worksheet dataset into the local dataset.
            Dim schemaReader As New System.IO.StringReader(dataItem1.Schema)
            Dim xmlReader As New System.IO.StringReader(dataItem1.Xml)
            productDataSet.ReadXmlSchema(schemaReader)
            productDataSet.ReadXml(xmlReader)
    
            Console.WriteLine("After reading data from the cache dataset, the local dataset has " & _
                "{0} rows.", productDataSet.Product.Rows.Count.ToString())
        Else
            Console.WriteLine("The data object is not found in the data cache.")
        End If
    Catch ex As System.IO.FileNotFoundException
        Console.WriteLine("The specified workbook does not exist.")
    Catch ex As System.Xml.XmlException
        Console.WriteLine("The data object has invalid XML information.")
    Finally
        If Not (serverDocument1 Is Nothing) Then
            serverDocument1.Close()
        End If
        Console.WriteLine(vbLf & vbLf & "Press Enter to close the application.")
        Console.ReadLine()
    End Try
    
    try
    {
        serverDocument1 = new ServerDocument(workbookPath);
        CachedDataHostItem dataHostItem1 =
            serverDocument1.CachedData.HostItems["AdventureWorksReport.Sheet1"];
        CachedDataItem dataItem1 = dataHostItem1.CachedData["adventureWorksLTDataSet"];
    
        if (dataItem1 != null)
        {
            Console.WriteLine("Before reading data from the cache dataset, the local dataset has " +
                "{0} rows.", productDataSet.Product.Rows.Count.ToString());
    
            // Read the cached data from the worksheet dataset into the local dataset.
            System.IO.StringReader schemaReader = new System.IO.StringReader(dataItem1.Schema);
            System.IO.StringReader xmlReader = new System.IO.StringReader(dataItem1.Xml);
            productDataSet.ReadXmlSchema(schemaReader);
            productDataSet.ReadXml(xmlReader);
    
            Console.WriteLine("After reading data from the cache dataset, the local dataset has " +
                "{0} rows.", productDataSet.Product.Rows.Count.ToString());
        }
        else
        {
            Console.WriteLine("The data object is not found in the data cache.");
        }
    }
    catch (System.IO.FileNotFoundException)
    {
        Console.WriteLine("The specified workbook does not exist.");
    }
    catch (System.Xml.XmlException)
    {
        Console.WriteLine("The data object has invalid XML information.");
    }
    finally
    {
        if (serverDocument1 != null)
        {
            serverDocument1.Close();
        }
    
        Console.WriteLine("\n\nPress Enter to close the application.");
        Console.ReadLine();
    }
    
  10. 빌드 메뉴에서 DataReader 빌드를 클릭합니다.

프로젝트 테스트

콘솔 응용 프로그램을 실행하면 로컬 데이터 집합의 행 수가 표시됩니다.

통합 문서를 테스트하려면

  1. 솔루션 탐색기에서 DataReader 프로젝트를 마우스 오른쪽 단추로 클릭하고 디버그를 가리킨 다음 새 인스턴스 시작을 클릭합니다.

    응용 프로그램에서 로컬 데이터 집합의 행 수가 295개라고 보고하는지 확인합니다.

  2. Enter 키를 눌러 응용 프로그램을 닫습니다.

다음 단계

캐시된 데이터를 작업에 사용하는 방법에 대한 자세한 내용은 다음 항목을 참조하십시오.

참고 항목

작업

방법: 서버에 있는 통합 문서에서 캐시된 데이터 검색

방법: 서버에 있는 통합 문서에 데이터 삽입

연습: 서버의 통합 문서에 데이터 삽입

연습: 서버의 통합 문서에서 캐시된 데이터 변경

개념

Windows Forms 응용 프로그램에서 데이터에 연결