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

중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

815660
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
이 문서에서는 Microsoft Visual C# .NET 버전에 307587 참조하십시오.

이 문서에서는 Microsoft Visual Basic .NET 버전에 301248 참조하십시오.

이 문서에서는 다음 Microsoft .NET Framework 클래스 라이브러리의 네임스페이스를 참조합니다.
  • System.Data
  • System.Data.SqlClient

이 작업의

요약
이 문서에서는 데이터베이스에서 로드하고 데이터를 포함하는 DataSet 가져오는 방법을 보여 줍니다 해당 데이터를 수정하는 방법, 다음 원본을 업데이트하는 데 다시 데이터베이스에 보내는 방법.

DataSet 개체는, Microsoft .NET Framework 데이터 액세스 핵심 부분으로 테이블, 뷰 및 관계를 보유할 수 메모리에 개체입니다.

back to the top

요구 사항

다음은 권장되는 하드웨어, 소프트웨어, 네트워크 인프라 및 필요한 서비스 팩의 목록입니다.
  • 다음 중 하나를: 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)

back to the top

데이터베이스에서 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 SERVERdaAuthors->Update(dsPubs, "Authors");Console::WriteLine("SQL Server updated successfully, Check Server explorer to see changes");Console::ReadLine();objConn->Close ();
  11. 프로젝트를 저장하십시오.
  12. 디버그 메뉴에서 프로젝트를 실행하려면 시작 을 클릭하십시오.

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

back to the top

코드 목록 완료

// 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 applicationint _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 ();    }}


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

경고: 이 문서는 자동 번역되었습니다

속성

문서 ID: 815660 - 마지막 검토: 01/17/2015 06:43:54 - 수정: 5.2

  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • kbnosurvey kbarchive kbmt kbsystemdata kbsqlclient kbhowtomaster kbhowto KB815660 KbMtko
피드백