다음을 통해 공유


DataSet 클래스

메모리 내의 데이터 캐시를 나타냅니다.

네임스페이스: System.Data
어셈블리: System.Data(system.data.dll)

구문

‘선언
<SerializableAttribute> _
Public Class DataSet
    Inherits MarshalByValueComponent
    Implements IListSource, IXmlSerializable, ISupportInitializeNotification, ISupportInitialize, _
    ISerializable
‘사용 방법
Dim instance As DataSet
[SerializableAttribute] 
public class DataSet : MarshalByValueComponent, IListSource, IXmlSerializable, ISupportInitializeNotification, 
    ISupportInitialize, ISerializable
[SerializableAttribute] 
public ref class DataSet : public MarshalByValueComponent, IListSource, IXmlSerializable, ISupportInitializeNotification, 
    ISupportInitialize, ISerializable
/** @attribute SerializableAttribute() */ 
public class DataSet extends MarshalByValueComponent implements IListSource, IXmlSerializable, 
    ISupportInitializeNotification, ISupportInitialize, ISerializable
SerializableAttribute 
public class DataSet extends MarshalByValueComponent implements IListSource, IXmlSerializable, 
    ISupportInitializeNotification, ISupportInitialize, ISerializable

설명

DataSet은 데이터 소스에서 검색한 메모리 내의 데이터 캐시이며 ADO.NET 아키텍처의 주요 구성 요소입니다. DataSetDataRelation 개체를 통해 서로 연결할 수 있는 DataTable 개체의 컬렉션으로 구성됩니다. 또한 UniqueConstraint 개체와 ForeignKeyConstraint 개체를 사용하여 DataSet에 데이터 무결성을 적용할 수 있습니다. DataSet 개체 작업에 대한 자세한 내용은 ADO.NET에서 DataSet 사용를 참조하십시오.

DataTable 개체에는 데이터가 들어 있는 반면, DataRelationCollection을 사용하면 테이블 계층 구조를 탐색할 수 있습니다. 테이블은 Tables 속성을 통해 액세스되는 DataTableCollection에 포함됩니다. DataTable 개체에 액세스할 때는 조건에 따라 대/소문자가 구분됩니다. 예를 들어, 두 DataTable의 이름이 각각 "mydatatable"과 "Mydatatable"인 경우에는 두 테이블 중 하나를 검색하는 데 사용되는 문자열에서 대/소문자를 구분합니다. 그러나 "mydatatable"은 있고 "Mydatatable"은 없는 경우에는 검색 문자열에서 대/소문자를 구분하지 않습니다. DataTable 개체 작업에 대한 자세한 내용은 DataTable 만들기을 참조하십시오.

DataSet은 데이터와 스키마를 XML 문서로 읽고 쓸 수 있습니다. 이렇게 하면 데이터와 스키마를 HTTP를 통해 전송할 수 있으며 XML 사용이 가능한 모든 플랫폼의 응용 프로그램에서 사용할 수 있습니다. WriteXmlSchema 메서드를 사용하여 스키마를 XML 스키마로 저장하고 WriteXml 메서드를 사용하여 스키마와 데이터를 모두 저장할 수 있습니다. ReadXml 메서드를 사용하면 스키마와 데이터가 모두 들어 있는 XML 문서를 읽을 수 있습니다.

일반적인 다중 계층 구현에서 DataSet을 만들고 새로 고친 다음 원본 데이터를 업데이트하는 단계는 다음과 같습니다.

  1. DataSet의 각 DataTable을 빌드하고 DataAdapter를 사용하여 데이터 소스의 데이터로 채웁니다.

  2. DataRow 개체를 추가, 업데이트 또는 삭제하여 개별 DataTable 개체에서 데이터를 변경합니다.

  3. GetChanges 메서드를 호출하여 데이터만 변경한 둘째 DataSet을 만듭니다.

  4. 두 번째 DataSet을 인수로 전달하여 DataAdapterUpdate 메서드를 호출합니다.

  5. Merge 메서드를 호출하여 둘째 DataSet의 변경 내용을 첫째와 병합합니다.

  6. DataSet에서 AcceptChanges를 호출합니다. 또는 RejectChanges를 호출하여 변경을 취소합니다.

참고

DataSetDataTable 개체는 MarshalByValueComponent에서 상속되며 원격 서비스를 위한 ISerializable 인터페이스를 지원합니다. 이 두 개체는 원격화할 수 있는 유일한 ADO.NET 개체입니다.

항목 위치
방법: 형식화된 데이터 집합 만들기 Data Access in Visual Studio
연습: TreeView 컨트롤에 계층 데이터 표시 Building ASP .NET Web Applications in Visual Studio
연습: TreeView 컨트롤에 계층 데이터 표시 Building ASP .NET Web Applications in Visual Studio
방법: 형식화된 데이터 집합 만들기 Visual Studio의 데이터 액세스
연습: TreeView 컨트롤에 계층 데이터 표시 Visual Studio에서 ASP .NET 웹 응용 프로그램 빌드
연습: TreeView 컨트롤에 계층 데이터 표시 Visual Studio에서 ASP .NET 웹 응용 프로그램 빌드

예제

다음 예제는 Northwind 데이터베이스에서 DataSet을 만들고 채우는 결합된 여러 메서드로 구성되어 있습니다.

Option Explicit On
Option Strict On

Imports System.Data
Imports system.Data.SqlClient

Public Class NorthwindDataSet

    Public Shared Sub Main()
        Dim connectionString As String = _
            GetConnectionString()
        ConnectToData(connectionString)
    End Sub

    Private Shared Sub ConnectToData( _
        ByVal connectionString As String)

        ' Create a SqlConnection to the Northwind database.
        Using connection As SqlConnection = New SqlConnection( _
           connectionString)

            ' Create a SqlDataAdapter for the Suppliers table.
            Dim suppliersAdapter As SqlDataAdapter = _
               New SqlDataAdapter()

            ' A table mapping names the DataTable.
            suppliersAdapter.TableMappings.Add("Table", "Suppliers")

            ' Open the connection.
            connection.Open()
            Console.WriteLine("The SqlConnection is open.")

            ' Create a SqlCommand to retrieve Suppliers data.
            Dim suppliersCommand As SqlCommand = New SqlCommand( _
               "SELECT SupplierID, CompanyName FROM dbo.Suppliers;", _
               connection)
            suppliersCommand.CommandType = CommandType.Text

            ' Set the SqlDataAdapter's SelectCommand.
            suppliersAdapter.SelectCommand = suppliersCommand

            ' Fill the DataSet.
            Dim dataSet As DataSet = New DataSet("Suppliers")
            suppliersAdapter.Fill(dataSet)

            ' Create a second SqlDataAdapter and SqlCommand to get
            ' the Products table, a child table of Suppliers. 
            Dim productsAdapter As SqlDataAdapter = _
                New SqlDataAdapter()
            productsAdapter.TableMappings.Add("Table", "Products")

            Dim productsCommand As SqlCommand = New SqlCommand( _
               "SELECT ProductID, SupplierID FROM dbo.Products;", _
               connection)
            productsAdapter.SelectCommand = productsCommand

            ' Fill the DataSet.
            productsAdapter.Fill(dataSet)

            ' Close the connection.
            connection.Close()
            Console.WriteLine("The SqlConnection is closed.")

            ' Create a DataRelation to link the two tables
            ' based on the SupplierID.
            Dim parentColumn As DataColumn = _
               dataSet.Tables("Suppliers").Columns("SupplierID")
            Dim childColumn As DataColumn = _
               dataSet.Tables("Products").Columns("SupplierID")
            Dim relation As DataRelation = New _
               System.Data.DataRelation("SuppliersProducts", _
               parentColumn, childColumn)
            dataSet.Relations.Add(relation)

            Console.WriteLine( _
               "The {0} DataRelation has been created.", _
               relation.RelationName)
        End Using

    End Sub

    Private Shared Function GetConnectionString() As String
        ' To avoid storing the connection string in your code,  
        ' you can retrieve it from a configuration file.
        Return "Data Source=(local);Initial Catalog=Northwind;" _
           & "Integrated Security=SSPI;"
    End Function
End Class
using System;
using System.Data;
using System.Data.SqlClient;

namespace Microsoft.AdoNet.DataSetDemo
{
    class NorthwindDataSet
    {
        static void Main()
        {
            string connectionString = GetConnectionString();
            ConnectToData(connectionString);
        }

        private static void ConnectToData(string connectionString)
        {
            //Create a SqlConnection to the Northwind database.
            using (SqlConnection connection =
                       new SqlConnection(connectionString))
            {
                //Create a SqlDataAdapter for the Suppliers table.
                SqlDataAdapter adapter = new SqlDataAdapter();

                // A table mapping names the DataTable.
                adapter.TableMappings.Add("Table", "Suppliers");

                // Open the connection.
                connection.Open();
                Console.WriteLine("The SqlConnection is open.");

                // Create a SqlCommand to retrieve Suppliers data.
                SqlCommand command = new SqlCommand(
                    "SELECT SupplierID, CompanyName FROM dbo.Suppliers;",
                    connection);
                command.CommandType = CommandType.Text;

                // Set the SqlDataAdapter's SelectCommand.
                adapter.SelectCommand = command;

                // Fill the DataSet.
                DataSet dataSet = new DataSet("Suppliers");
                adapter.Fill(dataSet);

                // Create a second Adapter and Command to get
                // the Products table, a child table of Suppliers. 
                SqlDataAdapter productsAdapter = new SqlDataAdapter();
                productsAdapter.TableMappings.Add("Table", "Products");

                SqlCommand productsCommand = new SqlCommand(
                    "SELECT ProductID, SupplierID FROM dbo.Products;",
                    connection);
                productsAdapter.SelectCommand = productsCommand;

                // Fill the DataSet.
                productsAdapter.Fill(dataSet);

                // Close the connection.
                connection.Close();
                Console.WriteLine("The SqlConnection is closed.");

                // Create a DataRelation to link the two tables
                // based on the SupplierID.
                DataColumn parentColumn =
                    dataSet.Tables["Suppliers"].Columns["SupplierID"];
                DataColumn childColumn =
                    dataSet.Tables["Products"].Columns["SupplierID"];
                DataRelation relation =
                    new System.Data.DataRelation("SuppliersProducts",
                    parentColumn, childColumn);
                dataSet.Relations.Add(relation);
                Console.WriteLine(
                    "The {0} DataRelation has been created.",
                    relation.RelationName);
            }
        }

        static private string GetConnectionString()
        {
            // To avoid storing the connection string in your code, 
            // you can retrieve it from a configuration file.
            return "Data Source=(local);Initial Catalog=Northwind;"
                + "Integrated Security=SSPI";
        }
    }
}

상속 계층 구조

System.Object
   System.ComponentModel.MarshalByValueComponent
    System.Data.DataSet

스레드로부터의 안전성

이 형식은 다중 스레드 읽기 작업에 안전합니다. 쓰기 작업을 동기화해야 합니다.

플랫폼

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

2.0, 1.1, 1.0에서 지원

.NET Compact Framework

2.0, 1.0에서 지원

참고 항목

참조

DataSet 멤버
System.Data 네임스페이스

기타 리소스

ADO.NET에서 DataSet 사용