Visual C++ .NET 또는 Visual C++ 2005를 사용하여 데이터베이스에서 DataSet 개체 업데이트하는 방법

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

이 페이지에서

요약

이 문서에서는 데이터베이스에서 로드하고 데이터를 포함하는 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 데이터 엔진 (MSDE) PUBS 예제 데이터베이스 사용하여 적절한 사용 권한, UserID 및 암호 값이 설치된.
  • Microsoft Visual Studio .NET 또는 Microsoft Visual Studio 2005
이 문서에서는 사용자가 다음 항목을 잘 알고 있다고 가정합니다.
  • 데이터베이스 용어
  • 구조적된 쿼리 언어 (SQL)


데이터베이스에서 DataSet 개체 업데이트 방법

이 섹션에서는 DataSet 개체를 사용하여 데이터베이스에서 데이터를 업데이트하는 방법을 보여 줍니다.

중요한SqlCommand 개체에 삽입, 업데이트 및 데이터베이스의 데이터를 직접 삭제할 수도 있습니다.

DataSet 로드한 후에는 데이터를 수정할 수 있습니다. DataSet 이러한 변경 내용을 추적하는 것입니다. DataSet 개체는 데이터베이스에서 검색된 데이터의 메모리 내 캐시로 간주할 수 있습니다. DataSet 개체는 테이블, 관계 및 제약 조건의 컬렉션이 구성됩니다.

DataSet 업데이트하고 해당 업데이트를 다시 데이터베이스에 보내는 다음과 같이 하십시오.
  1. Microsoft Visual Studio .NET 또는 Microsoft Visual Studio 2005 엽니다.
  2. Visual C++ .NET에서 새 Managed C++ 응용 프로그램 만듭니다. Visual Studio main() 함수를 만듭니다. main() 함수에서 생성된 코드를 제거하십시오.
  3. 시스템System.Data 네임스페이스에 대한 참조를 추가하려면 다음 코드를
    #using <System.Dll>
    #using <System.Data.Dll>
    #using <System.Xml.Dll>
  4. USING 문을 시스템, System.DataSystem.Data.SqlClient 네임스페이스를 사용하여 나중에 코드에서 이 네임스페이스의 선언을 한정하지 않아도 됩니다. 이 명령문은 항상 선언 앞에 사용해야 합니다.
    using namespace System;
    using namespace System::Data;
    using namespace System::Xml;
    using namespace System::Data::SqlClient;
    
  5. 데이터를 수정하고 변경 내용을 데이터베이스에 다시 전송하기 전에 정보를 DataSet 으로 로드해야 합니다.

    다음 코드에서 연결 문자열을 로컬 컴퓨터 또는 해당 코드가 실행 중인 컴퓨터에서 위치한 SQL Server를 가리킵니다. 이 문자열을 사용자 고유의 설정을 바꿉니다.

    요약하면 연결이 만들어지고 다음 데이터 어댑터, 데이터 집합 을 데이터로 채우기 위해 사용되는 만들어집니다.
    SqlConnection  *objConn;
    String *sConnectionString;
    sConnectionString = "Password=StrongPassword;User ID=UserName;Initial Catalog=pubs;Data Source=(local)";
    
    objConn = new SqlConnection(sConnectionString);
    objConn->Open();
            
    // Create an instance of a DataAdapter.
    SqlDataAdapter* daAuthors = new SqlDataAdapter("Select * From Authors", objConn);
    
    // Create an instance of a DataSet, and retrieve data from the Authors table.
    DataSet* dsPubs = new DataSet("Pubs");
    daAuthors->FillSchema(dsPubs,SchemaType::Source, "Authors");
    daAuthors->Fill(dsPubs,"Authors");
    
    컴파일러 옵션을 지원하는 참고 공용 언어 런타임에서 추가해야 합니다 (/clr:oldSyntax) 성공적으로 이전 코드 샘플을 컴파일하려면 Visual C++ 2005 에서. Visual C++ 2005에서는 공용 언어 런타임 지원 컴파일러 옵션을 추가하려면 다음과 같이 하십시오.
    1. 프로젝트 를 클릭한 다음 <ProjectName> 속성을.

      참고<ProjectName> 프로젝트 이름에 대한 자리 표시자입니다.
    2. 구성 속성 을 확장한 다음 일반 을 클릭하십시오.
    3. 확인란을 선택하고 공용 언어 런타임 지원, 이전 구문 (/clr:oldSyntax)공용 언어 런타임 지원 프로젝트 설정을 오른쪽 창에 적용 을 누른 다음 확인 을 누릅니다.
    공용 언어 런타임에 대한 자세한 내용은 컴파일러 옵션을 지원하는 보려면 다음 Microsoft 웹 사이트를 방문하십시오.
    /clr (공용 언어 런타임 컴파일)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
    이 단계는 전체 문서에 적용됩니다.
  6. 데이터를 로드한 것을 수정할 수 있습니다. 다양한 방법으로 행이나 레코드를 추가할 수 있습니다. 이 코드 샘플에서는 세 단계 절차를 사용합니다.
    1. DataRow 개체를 DataTable 에서 얻습니다.
    2. DataRow 필드 값을 필요에 따라 설정하십시오.
    3. 새 개체에 DataTable.Rows 컬렉션의 Add 메서드를 전달하십시오.

    5단계에서 코드 뒤에 다음 코드를 붙여 넣습니다.
    // BEGIN ADD CODE 
    // Create a new instance of a DataTable.
    DataTable* tblAuthors = dsPubs->Tables->Item["Authors"];
    
    
    // Obtain a new DataRow object from the DataTable.
    DataRow* drCurrent = tblAuthors->NewRow();
    
    // Set the DataRow field values as necessary.
    drCurrent->set_Item("au_id",new String("993-21-3427"));
    
    drCurrent->set_Item("au_fname",new String("George"));
    drCurrent->set_Item("au_lname",new String("Johnson"));
    drCurrent->set_Item("phone",new String("800 226-0752"));
    drCurrent->set_Item("address", new String ("1956 Arlington Pl."));
    drCurrent->set_Item("city", new String("Winnipeg"));
    drCurrent->set_Item("state", new String("MB"));
    drCurrent->set_Item("contract",__box(1));
    
    // Pass that new object into the Add method of the DataTable.
    tblAuthors->Rows->Add(drCurrent);
    Console::WriteLine("Add was successful, Click any key to continue!!");
    Console::ReadLine();
    
    // END ADD CODE  
    
  7. 기존 행을 편집하려면 적절한 DataRow 개체를 구하여 다음 하나 이상의 열에 대한 새 값을 제공하십시오. 먼저 데이터 (단계 5에서 FillSchema 호출) 뿐만 아니라 테이블의 스키마를 로드할 때문에 훨씬 더 쉽게 올바른 행을 찾아야 합니다. 스키마 위치에 테이블의 어떤 열이 해당 기본 키를 알고 있으며 Rows 컬렉션의 Find 메서드를 사용할 수 있습니다.

    Find 메서드는 DataRow 개체를 특정 값 (이 경우, au_id) 에서 기본 키 반환합니다. DataRow 있어야 후에는 열을 수정할 수 있습니다. BeginEditEndEdit, 수정 내용을 래핑할 필요가 있지만 이는 간단하게 작업 DataSet 수 및 DataSetEndEdit 호출할 때 유효성 검사를 동시에 수행할 수 있습니다.

    6단계에서 코드 뒤에 다음 코드를 붙여 넣습니다:
    // BEGIN EDIT CODE 
    
    drCurrent = tblAuthors->Rows->Find(new String("213-46-8915"));
    drCurrent->BeginEdit();
    
    drCurrent->set_Item("phone",String::Concat(S"342",(static_cast<String *>(drCurrent->Item["phone"]))->Substring(3)));
    drCurrent->EndEdit ();
    Console::WriteLine("Record edited successfully, Click any key to continue!!");
    Console::ReadLine();
    
    // END EDIT CODE
    
  8. 원본 데이터베이스의 모든 이 변경 내용을 업데이트하려면 DataSet데이터 어댑터 개체의 Update 메서드를 전달하십시오.

    그러나 업데이트 호출하기 전에 데이터 어댑터 개체의 UpdateCommand, InsertCommand, DeleteCommand 속성을 설정해야 합니다. SQL 수동으로 작성하고 이러한 세 가지 속성을 사용하여 해당 SqlCommand 개체에 채울 수 있지만 Visual Studio .NET 이러한 세 가지 명령을 자동으로 생성할 수도 있습니다.

    필요할 때 필요한 명령을 생성하는 데 SqlCommandBuilder 개체의 인스턴스를 만들고 생성자에서 DataAdapter 사용해야 합니다. 다음에 나오는 코드 샘플에 표시된 이 메서드를 사용할 경우, 테이블에 대한 기본 키 정보를 사용할 수 있어야 합니다. 기본 키 정보를 액세스할 수 FillSchema, 호출 및 다음 AddWithKey 수 내용을 DataAdapter MissingSchemaAction 속성 설정 또는 수동으로 코드에서 기본 키를 설정하십시오.

    단계 7.
    // BEGIN SEND CHANGES TO SQL SERVER 
    
    SqlCommandBuilder* objCommandBuilder = new SqlCommandBuilder(daAuthors);
    daAuthors->Update(dsPubs, "Authors");
    Console::WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
    Console::ReadLine();
    
    // END SEND CHANGES TO SQL SERVER 
    
  9. DataRow 개체의 Delete 메서드를 사용하여 행을 완전히 삭제합니다.

    참고 Rows 컬렉션에서 제거하고 RemoveAt 을 행을 삭제할 수 있지만 대신 행 컬렉션에서 제거할 바로 보일 수 있는 두 가지 방법이 포함되어 있습니다. Delete 메서드를 경우에만 삭제를 다시 원본 데이터베이스에 보냅니다.

    8단계에서 코드 뒤에 다음 코드를 붙여://BEGIN
    //BEGIN DELETE CODE 
    
    drCurrent = tblAuthors->Rows->Find(new String("993-21-3427"));
    drCurrent->Delete();
    Console::WriteLine("Record deleted successfully, Click any key to continue!!"); 
    Console::ReadLine();
    
    //END DELETE CODE  
    
  10. 앞서 추가한 레코드를 제거하려면 SQL Server에 변경 내용을 보냅니다.

    9 단계에서 코드 뒤에 다음 코드를 붙여 넣습니다.
    // CLEAN UP SQL SERVER
    daAuthors->Update(dsPubs, "Authors");
    Console::WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
    Console::ReadLine();
    objConn->Close ();
    
  11. 프로젝트를 저장하십시오.
  12. 디버그 메뉴에서 프로젝트를 실행하려면 시작 을 클릭하십시오.

    코드 진행률을 나타내고 코드 진행되는 데이터의 현재 상태를 검토할 수 있는 여러 메시지 상자가 나타나는 살펴봅니다.


코드 목록 완료

// This is the main project file for VC++ application project 
// generated using an Application Wizard.

#include "stdafx.h"

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

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

// This is the entry point for this application
int _tmain(void)
{
    SqlConnection  *objConn;
    try
    {
        String *sConnectionString;
        sConnectionString = "Password=StrongPassword;User ID=UserName;Initial Catalog=pubs;Data Source=(local)";

        objConn = new SqlConnection(sConnectionString);
        objConn->Open();
        
        // Create an instance of a DataAdapter.
        SqlDataAdapter* daAuthors = new SqlDataAdapter("Select * From Authors", objConn);

        // Create an instance of a DataSet, and retrieve data from the Authors table.
        DataSet* dsPubs = new DataSet("Pubs");
        daAuthors->FillSchema(dsPubs,SchemaType::Source, "Authors");
        daAuthors->Fill(dsPubs,"Authors");

        // BEGIN ADD CODE 
        // Create a new instance of a DataTable.
        DataTable* tblAuthors = dsPubs->Tables->Item["Authors"];


        // Obtain a new DataRow object from the DataTable.
        DataRow* drCurrent = tblAuthors->NewRow();

        // Set the DataRow field values as necessary.
        drCurrent->set_Item("au_id",new String("993-21-3427"));

        drCurrent->set_Item("au_fname",new String("George"));
        drCurrent->set_Item("au_lname",new String("Johnson"));
        drCurrent->set_Item("phone",new String("800 226-0752"));
        drCurrent->set_Item("address", new String ("1956 Arlington Pl."));
        drCurrent->set_Item("city", new String("Winnipeg"));
        drCurrent->set_Item("state", new String("MB"));
        drCurrent->set_Item("contract",__box(1));

        // Pass that new object into the Add method of the DataTable.
        tblAuthors->Rows->Add(drCurrent);
        Console::WriteLine("Add was successful, Click any key to continue!!");
        Console::ReadLine();

        // END ADD CODE  
        
        // BEGIN EDIT CODE 

        drCurrent = tblAuthors->Rows->Find(new String("213-46-8915"));
        drCurrent->BeginEdit();

        drCurrent->set_Item("phone",String::Concat(S"342",(static_cast<String *>(drCurrent->Item["phone"]))->Substring(3)));
        drCurrent->EndEdit ();
        Console::WriteLine("Record edited successfully, Click any key to continue!!");
        Console::ReadLine();

        // END EDIT CODE

        // BEGIN SEND CHANGES TO SQL SERVER 

        SqlCommandBuilder* objCommandBuilder = new SqlCommandBuilder(daAuthors);
        daAuthors->Update(dsPubs, "Authors");
        Console::WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
        Console::ReadLine();

        // END SEND CHANGES TO SQL SERVER 

        //BEGIN DELETE CODE 

        drCurrent = tblAuthors->Rows->Find(new String("993-21-3427"));
        drCurrent->Delete();
        Console::WriteLine("SRecord deleted successfully, Click any key to continue!!"); 
        Console::ReadLine();

        //END DELETE CODE  


        // CLEAN UP SQL SERVER
        daAuthors->Update(dsPubs, "Authors");
        Console::WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
        Console::ReadLine();
    }
    catch (Exception* ex)
    {
        Console::WriteLine (ex->Message );
    }
    __finally
    {
        objConn->Close ();
    }
}


참조

DataSet 개체 및 SQL, ADO.NET을 사용하는 방법에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 방문하십시오.

속성

기술 자료: 815660 - 마지막 검토: 2007년 3월 19일 월요일 - 수정: 5.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
키워드:?
kbmt kbsystemdata kbsqlclient kbhowtomaster kbhowto KB815660 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

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