HOWTO: Visual C++ .NET을 사용하여 데이터베이스에서 DataSet 개체 채우기

기술 자료 번역 기술 자료 번역
기술 자료: 818779 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

이 문서에서는 하나 이상의 데이터베이스 쿼리의 결과로 DataSet 개체를 채우는 방법과 쿼리가 DataSet 개체에 로드된 후 데이터에 액세스하는 방법을 단계별로 설명합니다. DataSet 개체는 Microsoft .NET Framework에서 데이터 액세스의 핵심적인 부분을 형성하는 테이블, 뷰 및 관계를 보관할 수 있는 메모리 내 개체입니다.


추가 정보

요구 사항

다음은 권장되는 하드웨어, 소프트웨어 및 네트워크 인프라와 필요한 서비스 팩의 목록입니다.
  • Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server 또는 Microsoft Windows NT 4.0 Server
  • Microsoft SQL Server 7.0, Microsoft SQL Server 2000 또는 Microsoft Data Engine(Pubs 예제 데이터베이스가 설치된 상태)
  • Microsoft Visual Studio .NET
이 문서에서는 사용자가 다음 내용을 잘 알고 있는 것으로 가정합니다.
  • 데이터베이스 용어
  • Microsoft SQL Server


DataSet 채우기

System.Data 네임스페이스에서 다양한 개체를 사용하여 데이터베이스 서버에 연결하고 쿼리를 실행한 다음 결과를 DataSet 개체에 넣을 수 있습니다. DataSet은 연결이 끊어진 개체입니다. 따라서 데이터를 로드한 후에는 데이터를 추가로 로드하거나 메모리 내 정보 복사본의 변경 사항을 서버에 업데이트할 때 데이터베이스에 연결됩니다.

데이터베이스에서 DataSet으로 데이터를 로드하려면 다음과 같이 하십시오.
  1. Visual Studio .NET을 시작합니다.
  2. Visual C++ .NET 2002에서 Managed C++ 응용 프로그램을 새로 만들거나 Visual C++ .NET 2003에서 콘솔 응용 프로그램을 새로 만들 수 있습니다. 프로젝트의 이름을 MyApplication으로 지정한 다음 확인을 누릅니다.
  3. 다음 코드를 MyApplication.cpp 파일에 추가합니다.

    이렇게 하면 System.Dll 네임스페이스, System.Xml 네임스페이스 및 System.Data 네임스페이스에 참조가 추가됩니다.
    #using <System.Dll>
    #using <System.Data.Dll>
    #using <System.Xml.Dll>
    
  4. System 네임스페이스, System.Data 네임스페이스, System.Xml 네임스페이스, System.Collections 네임스페이스 및 System.Data.SqlClient 네임스페이스에 USING 문을 사용하여 나중에 코드에서 이러한 네임스페이스의 선언을 한정하지 않아도 되도록 합니다. 이러한 문은 다른 선언 앞에 사용해야 합니다.
    using namespace System;
    using namespace System::Data;
    using namespace System::Xml;
    using namespace System::Collections;
    using namespace System::Data::SqlClient;
    
  5. 데이터베이스에서 DataSet으로 데이터를 이동합니다.

    이렇게 하려면 데이터베이스 연결을 설정해야 합니다. 여기에는 System.Data.SqlClient.SqlCommand 개체와 연결 문자열이 필요합니다. 코드의 연결 문자열은 로컬 컴퓨터(코드를 실행하는 컴퓨터)에 있는 SQL Server를 실행하는 컴퓨터에 연결합니다. 이 연결 문자열을 사용자 환경에 적합하게 수정해야 합니다. SqlConnection 개체를 만들었으면 이 개체의 Open 메서드를 호출하여 실제 데이터베이스 링크를 설정합니다.
    SqlConnection* objConn;
    String* sConnectionString;
    sConnectionString = "Password=myPassword;User ID=myUserID;Initial Catalog=pubs;Data Source=(local)";
    
    objConn = new SqlConnection(sConnectionString);
    objConn->Open();
    
  6. 데이터베이스와 DataSet 개체 사이의 링크를 나타내는 DataAdapter 개체를 만듭니다. DataAdapter 생성자 개체의 일부로 SQL이나 다른 형식의 명령을 지정하여 데이터를 검색하는 데 사용할 수 있습니다. 다음 예제에서는 Pubs 데이터베이스의 Authors 테이블에서 레코드를 검색하는 SQL 문을 사용합니다.
    SqlDataAdapter* daAuthors = new SqlDataAdapter("Select * From Authors", objConn);
    
  7. DataSet 개체의 인스턴스를 선언한 다음 만듭니다.

    이 작업을 수행할 때 전체 DataSet의 이름을 제공해야 데이터 로드를 시작할 수 있습니다. 이름에 고유 테이블이 여러 개 포함되어 있을 수도 있습니다.
     DataSet* dsPubs = new DataSet("Pubs");
  8. 데이터 로딩을 처리하는 동안 FillSchema를 실행한 다음 Fill을 실행합니다.

    SqlDataAdapter 클래스는 이 데이터의 로딩에 필수적인 Fill 메서드와 FillSchema 메서드를 제공합니다. 두 메서드는 DataSet에 정보를 로드합니다. Fill 메서드는 데이터 자체를 로드하고 FillSchema 메서드는 특정 테이블에 대해 사용할 수 있는 모든 메타데이터(예: 열 이름, 기본 키 및 제약 조건)를 로드합니다.
    daAuthors->FillSchema(dsPubs,SchemaType::Source, "Authors");
    daAuthors->Fill(dsPubs,"Authors");
    

    Fill만 사용하는 경우 열 이름과 데이터 형식을 설명하는 데 필요한 기본 메타데이터만 로드할 수 있습니다. Fill 메서드는 기본 키 정보를 로드하지 않습니다. 기본 동작을 변경하려면 DataAdapter 개체의 MissingSchemaAction 속성을 MissingSchemaAction.AddWithKey로 설정하면 됩니다. 이렇게 하면 기본 정보 외에 기본 키 메타데이터가 로드됩니다.
    daAuthors->MissingSchemaAction = MissingSchemaAction::AddWithKey;
    daAuthors->Fill(dsPubs,"Authors");
    
    이제 데이터를 DataSet의 Tables 컬렉션에 있는 개별 DataTable 개체로 사용할 수 있습니다. FillSchemaFill에 대한 호출에서 테이블 이름을 지정한 경우에는 이 이름을 사용하여 필요한 특정 테이블에 액세스할 수 있습니다.
     DataTable* tblAuthors = dsPubs->Tables->Item["Authors"]; 
  9. GetEnumerator 함수를 사용하여 DataTable의 Rows 컬렉션에 있는 DataRow 개체에 액세스합니다. while 루프를 사용하여 테이블의 각 행을 반복합니다. 이름이나 위치 인덱스로 열에 액세스할 수 있습니다. 0이 첫 번째 열 위치입니다.
    IEnumerator* iEnum = tblAuthors->Rows->GetEnumerator();
            
     while(iEnum->MoveNext())
     {
            Console::WriteLine("{0}   {1}",dynamic_cast<String*>(dynamic_cast<DataRow *>(iEnum->Current)->get_Item("au_fname")),
                                           dynamic_cast<String*>(dynamic_cast<DataRow *>(iEnum->Current)->get_Item("au_lname")));
     }
    
  10. 프로젝트를 저장합니다. 디버그 메뉴에서 시작을 눌러 프로젝트를 실행합니다.



전체 코드 예제

// This is the main project file for the VC++ application project 
// that is generated by using the Application wizard.

#include "stdafx.h"

#using <mscorlib.dll>
#include <tchar.h>
#using <System.Dll>
#using <System.Data.Dll>
#using <System.Xml.Dll>

using namespace System;
using namespace System::Data;
using namespace System::Xml;
using namespace System::Collections;
using namespace System::Data::SqlClient;

// This is the entry point for this application.
int _tmain(void)
{
    SqlConnection* objConn;
    try
    {

        
        String* sConnectionString;
        sConnectionString = "Password=myPassword;User ID=myUserID;Initial Catalog=pubs;Data Source=(local)";

        objConn = new SqlConnection(sConnectionString);
        objConn->Open();
        
        SqlDataAdapter* daAuthors = new SqlDataAdapter("Select * From Authors", objConn);
        DataSet* dsPubs = new DataSet("Pubs");
        
        daAuthors->FillSchema(dsPubs,SchemaType::Source, "Authors");
        daAuthors->Fill(dsPubs,"Authors");

        DataTable* tblAuthors = dsPubs->Tables->Item["Authors"];
        
        IEnumerator* iEnum = tblAuthors->Rows->GetEnumerator();
        
        while(iEnum->MoveNext())
        {
            Console::WriteLine("{0}   {1}",dynamic_cast<String*>(dynamic_cast<DataRow *>(iEnum->Current)->get_Item("au_fname")),
                                           dynamic_cast<String*>(dynamic_cast<DataRow *>(iEnum->Current)->get_Item("au_lname")));
            
        }
    }
    catch(Exception *ex)
    {
        Console::WriteLine( ex->Message );
    }
    __finally
    {
        objConn->Close();
    }
    
    return 0;
}


참조

자세한 내용은 다음 Microsoft 웹 사이트를 방문하십시오.

http://msdn2.microsoft.com/en-us/library/ms810293.aspx

http://msdn2.microsoft.com/en-us/library/ms973217.aspx

http://www.microsoft.com/korea/msdn/netframework/default.asp





Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 818779 - 마지막 검토: 2007년 5월 16일 수요일 - 수정: 2.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft ADO.NET 1.0
  • Microsoft ADO.NET 1.1
키워드:?
kbhowto kbhowtomaster kbsqlclient kbsystemdata KB818779

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com