개발 언어/C,C++,C#

c# 데이터 셋, 데이터 테이블, 데이터 로우 (data set, data table, data row)

삐뚤어진 개발자 2019. 12. 24.

c#에서 사용하는 DataSet, DataTable, DataRow의 개념을 한눈에 보여주는 사진이 있길래 들고 왔다.

 

 

DataSet, DataTable, DataRow의 클래스 구조나, 메서드 들은 아래의 링크에 잘 설명 되어있다.

 

https://docs.microsoft.com/ko-kr/dotnet/api/system.data.dataset?view=netframework-4.8

 

DataSet 클래스 (System.Data)

데이터의 인-메모리 캐시를 나타냅니다.Represents an in-memory cache of data.

docs.microsoft.com

 

위 링크에 사용된 DataSet 예제를 간단히 인용해 설명해보자면,

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))
            {
                //SqlDataAdapter를 호출, 객체생성한다. (Suppliers 테이블을 위한).
                SqlDataAdapter adapter = new SqlDataAdapter();

                // Suppliers 테이블로 매핑한다.
                adapter.TableMappings.Add("Table", "Suppliers");

                // 커넥션을 열고.
                connection.Open();
                Console.WriteLine("The SqlConnection is open.");

                // 쿼리 command를 작성 및 생성
                SqlCommand command = new SqlCommand(
                    "SELECT SupplierID, CompanyName FROM dbo.Suppliers;",  // Suppliers 테이블 조회
                    connection);
                command.CommandType = CommandType.Text;

                // adapter 에 위에 입력한 command를 세팅
                adapter.SelectCommand = command;

                // DataSet에 쿼리 결과값을 넣는다.
                DataSet dataSet = new DataSet("Suppliers");
                adapter.Fill(dataSet);

                // 두번째,SqlDataAdapter를 호출, 객체생성한다.
                // Suppliers테이블의 하위테이블인 Products 테이블을 어뎁터에 매핑 
                SqlDataAdapter productsAdapter = new SqlDataAdapter();
                productsAdapter.TableMappings.Add("Table", "Products");

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

                // DataSet에 쿼리 결과값을 넣는다.(첫번째, DataSet이랑 같은 DataSet)
                productsAdapter.Fill(dataSet);

                // 디비커넥션 닫음
                connection.Close();
                Console.WriteLine("The SqlConnection is closed.");

                // 두개의 테이블을 조회해온 데이터를 읽어보자.
                // SupplierID 컬럼.
                DataColumn parentColumn =
                    dataSet.Tables["Suppliers"].Columns["SupplierID"]; // Suppliers 테이블의 SupplierID 컬럼 
                DataColumn childColumn =
                    dataSet.Tables["Products"].Columns["SupplierID"]; // Products 테이블의 SupplierID 컬럼 
                DataRelation relation =
                    new System.Data.DataRelation("SuppliersProducts", // Suppliers테이블의 하위테이블인 Products 테이블의 관계를 추가 
                    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";
        }
    }
}

찬찬히 읽어 보면, DataRelation 클래스와, DataRelation 클래스의 사용법도 포함되어있다.

이 두 클래스는 다른 포스팅에 설명하겠다.

 

(DataRelation은 조인의 개념인 거 같다.)

https://docs.microsoft.com/ko-kr/dotnet/framework/data/adonet/dataset-datatable-dataview/navigating-datarelations

댓글