2012년 5월 1일 화요일

516) ADO.NET sample 2

[출처] 4. ADO.NET - DataTable|작성자 초천재

ADO.NET을 하면서 참으로 DB에 대한 설명을 많이 해야하는것은
ADO.NET을 공부하려는 사람들의 당연한 사실이다.
사실 우리는 DB의 데이터를 활용하기 위해서 ADO.NET을 공부하는것이니깐.....

다시 말하자면 ADO.NET은 DB정보를 활용하기 위한 DBMS 연결객체이다.

관계형 데이타베이스에서는 여러개의 테이블로 구성되어 테이블끼리 관계를 이룬다.
그러므로 우리는 테이블에 대해서 조금 자세히 언급할 필요가 있다.
닷넷환경의 최적언어인 C#을 선택하여 ADO.NET을 접근하겠다.

테이블은 DataTable 클래스로 표현한다.
생성자는 public DataTable([string tableName, string tableNamespace]) 로 표현된다.

1. 첫번째 인수 : 테이블의 이름(생략가능)
2. 두번째 인수 : 테이블의 네임스페이스 지정(생략가능)

※ 테이블의 주요 프로퍼티
(속성명 : 타입 : 설명) 순으로 표현하였다.

1. TableName : string : Table의 이름
2. Colums : DataColumnCollection : Table에 속한 열의 집합이고, 스키마를 결정한다.
3. Rows : DataRowCollection : Table에 속한 행의 집합
4. Constraints : ConstraintCollection : Table의 제약 조건 집합
5. PrimaryKey : DataColumn : Table의 primary key의 집합.
6. DataSet : DataSet : Table이 속한 DataSet이다.

.....이렇게 주요 프로퍼티가 많이 있다.
좀 더 자세히 알고 싶다면 MSDN (http://msdn.microsoft.com/ko-kr/library/system.data.datatable.aspx)
이나...본인 추전의 방법은 C#에서 DataTable을 생성해서 객체에 (점). 을 하나 붙여서 속성을 보는
아주 좋은 방법이 있으니 참고바란다.

절대 귀찮아서 그런것이 아니다. 피곤해서 그렇다..ㅡㅡ

위에서 보면 Collection이 참 많이 보이는데, 이는 DB에서 복수개의 컬럼(column)
복수개의 로우(row), 복수개의 프라이머리(primary)키, 복수개의 제약조건(constraint) 등이 있을 수 있다.
하나의 테이블에 당연히 집합으로 표현 할 수 밖에 없는것이다.

예를 들면  열의 집합은 Columns 컬렉션 프로퍼티로 관리한다.

아직 좀 이른감이 있지만 DataTable을 이용하여 Column과 Rows를 생성하여
하나의 테이블을 만들어 출력을 해보겠다.

using System;
using System.Data;
namespace Sample_DataTable
{
    class Program
    {
        static void Main(string[] args)
        {
            // 데이터테이블 생성, (데이타컬럼, 데이타로우) 정의
            DataTable DT = new DataTable("SampleTable");
            DataColumn dc1;
            DataRow dr1;

  // SampleTable이란 테이블이 생성되었으므로 이제 테이블에 들어갈 칼럼을 만들자.
  // dc1컬럼을 인스턴트화시켜 생성시키고 Name이라고 명명한다.
            dc1 = new DataColumn("Name");
           
            // DataType은 string으로 하며, unique지정 및 null허용을 하지 않게 한다.
            dc1.DataType = System.Type.GetType("System.String");
            dc1.Unique = true;
            dc1.AllowDBNull = false;
           
            // 만들어진 컬럼을 DT테이블에 추가한다.
            DT.Columns.Add(dc1);

            dc1 = new DataColumn("Age");
            dc1.DataType = System.Type.GetType("System.Int32");
            dc1.AllowDBNull = false;
            DT.Columns.Add(dc1);

            dc1 = new DataColumn("Addr");
            dc1.DataType = System.Type.GetType("System.String");
            dc1.AllowDBNull = true;
            DT.Columns.Add(dc1);

            // 이름, 나이, 주소 컬럼이 만들어져서 이제 3개의컬럼을 지닌 테이블이 완성되었다.
            // 대략 그려본다면 이런식이 된것이다.
                                   SampleTable
Name(이름)
Age(나이)
Addr(주소 )




            // 테이블의 소제목을 만들었으니 이제 내용을 채워넣은 가로줄을 한개 한개씩 넣어보자
            // DBMS의 insert문이라고 보면 된다.
            // 각각 의 컬럼(Name, Age, Addr)에 데이타를 넣고 DT.Row.Add(데이타로우) 를 지정해서
            // 한줄한줄 데이타를 insert 시킨다.
            for (int i = 0; i < 5; i++)
            {
                dr1 = DT.NewRow();
                dr1["Name"] = "초천재" + i.ToString();
                dr1["Age"] = 20 + i;
                dr1["addr"] = i.ToString() + "번지";
                DT.Rows.Add(dr1);
            }
Name
Age Addr 
초천재020 0번지 
초천재1 211번지 
초천재2 22  2번지
초천재323 3번지
초천재424 4번지
//이런식으로 데이타가 나오겠죠?
            // 출력확인!
            foreach (DataRow dr in DT.Rows)
            {
                Console.Write("데이타(Row) : ");
                foreach (DataColumn dc in DT.Columns)
                {
                    Console.Write(" {0}", dr[dc]);
                }
                Console.WriteLine();
            }
        }
    }
}

얼렁뚱땅 코딩이 되어버렸습니다.
하지만 단지 우린 간단히 DBMS로 만들수 있는 테이블을 이렇게 길게 코딩을 해서
테이블을 하나 만들어냈다는것 자체에 큰 의미를 둡니다.
또 하나는 테이블의 여러개의 Column과 Row로 이뤄져 Collection으로 관리되어 지고
있습니다. C# List를 보면 알수 있듯이 컬렉션 추가에서 쓰이는 Add()함수가 쓰였습니다.
DataColumn은 매우 유용한 기능이므로 꼭 숙지해야 합니다..
그럼 오늘도 테이블에서 조는 모습을 피하기 위해서 뜨끈한 이불로 갈 준비를 해야할 것 같네요

내일은 제가 좀 바쁜 일정이 있어서;;

 

댓글 없음:

댓글 쓰기

국정원의 댓글 공작을 지탄합니다.

UPBIT is a South Korean company, and people died of suicide cause of coin investment.

 UPBIT is a South Korean company, and people died of suicide cause of coin. The company helps the people who control the market price manipu...