2010. 4. 2. 20:44


DataSet -  여러개의 테이블로 구성되있다.



DataTable의 구성요소

DataRow(행에 대한 정보)
DataColumn(열에 대한 정보)
Constraint(값을 제어하는 규약)
DataRelation(두 테이블 간의 관계)



DataRelation(관계)

- DataColumn 개체를 통해 두 개의 DataTable 개체를 서로 연결하는데 사용

- 부모 및 자식 테이블의 일치하는 열 간에 관계가 만들어짐

- DataSet 내의 한 DataTable에서 다른 DataTable로 이동을 허용





또 다른 예제

static void Main(string[] args)
{
DataSet dataSet = new DataSet("MyData");
DataTable table = new DataTable("MyTable");
DataRow row;

table.Columns.Add("이름", typeof(string));       //컬럼 추가
table.Columns.Add("나이", typeof(int));
table.Columns.Add("학번", typeof(string));

 

//레코드 추가
row = table.NewRow();
row["이름"] = "천정민";
row["나이"] = 26;
row["학번"] = "123456789";
table.Rows.Add(row);

row = table.NewRow();
row["이름"] = "조아라";
row["나이"] = 23;
row["학번"] = "123456789";
table.Rows.Add(row);

row = table.NewRow();
row["이름"] = "안용준";
row["나이"] = 26;
row["학번"] = "987654321";
table.Rows.Add(row);

dataSet.Tables.Add(table);     //DataSet에 테이블 추가

 

//table 테이블 레코드 변경전

Console.WriteLine("table 테이블 레코드 변경전");
DataRow[] r = dataSet.Tables["MyTable"].Select();
foreach (DataRow ro in r)
{
    Console.WriteLine("이름 : " + ro["이름"].ToString() + " 나이 : " + ro["나이"].ToString() + " 학번 : " + ro["학번"].ToString());
}

Console.WriteLine();

 

//table 테이블 레코드변경
dataSet.Tables["MyTable"].Rows[0].Delete();           //테이블 삭제
dataSet.Tables["MyTable"].Rows[0].BeginEdit();        //수정시작
dataSet.Tables["MyTable"].Rows[0]["이름"] = "송창은";   //레코드 값 변경
dataSet.Tables["MyTable"].Rows[0].EndEdit();          //수정끝
dataSet.Tables["MyTable"].Rows[0].AcceptChanges();    //변경된 내용 실행

 

//table 레코드 값 얻어오기
Console.WriteLine("table 레코드 값 변경 후");
DataRow[] r2 = dataSet.Tables["MyTable"].Select();
foreach (DataRow ro in r2)
{
    Console.WriteLine("이름 : " + ro["이름"].ToString() + " 나이 : " +
ro["나이"].ToString() + " 학번 : " + ro["학번"].ToString());
}

Console.WriteLine();

 

//다른 테이블 생성 및 레코드 생성
DataTable OtherTable = new DataTable("OtherTable");
OtherTable.Columns.Add("학번", typeof(string));
OtherTable.Columns.Add("학년", typeof(int));

row = OtherTable.NewRow();
row["학번"] = "123456789";
row["학년"] = 4;
OtherTable.Rows.Add(row);

row = OtherTable.NewRow();
row["학번"] = "123456789";
row["학년"] = 3;
OtherTable.Rows.Add(row);

dataSet.Tables.Add(OtherTable);     //DataSet 추가

 

//OtherTable 레코드 값 얻어오기
Console.WriteLine("OtherTable 레코드 값 출력");
DataRow[] or = dataSet.Tables["OtherTable"].Select();
foreach (DataRow dr in or)
{
    Console.WriteLine("학번 : " + dr[0].ToString() + " 학년 : " + dr[1].ToString());
}

Console.WriteLine();


//pk설정
dataSet.Tables["Mytable"].PrimaryKey = new DataColumn[] { dataSet.Tables["Mytable"].Columns["학번"] };

 

//Relation 설정
DataRelation rel = new DataRelation("Stu", dataSet.Tables["Mytable"].Columns["학번"], dataSet.Tables["OtherTable"].Columns["학번"]);
dataSet.Relations.Add(rel);

 

//Relation 관계에서 부모에 해당하는 Row값으로 자식의 Row값을 출력
Console.WriteLine("Relation 관계에서 부모에 해당하는 Row값으로 자식의 Row값을 검색");
DataRow[] childrow = dataSet.Tables["MyTable"].Rows[0].GetChildRows("Stu");
//부모테이블의 0번째 row를 관계맺은 컬럼을 자식테이블에서 찾아라
foreach (DataRow cr in childrow) //childrow에 있는 값을 DataRow형식으로 가지고 오겠다
{
    Console.WriteLine("학번 : " + cr[0].ToString() + " 학년 : " + cr[1].ToString());
}
Console.WriteLine();

 

//테이블 갯수 출력
Console.WriteLine("테이블 수 : " + dataSet.Tables.Count);

//테이블 명 출력
foreach (DataTable t in dataSet.Tables)
{
    Console.WriteLine("테이블 명 : " + t.ToString());
}
//Console.WriteLine("테이블 명 : " + dataSet.Tables[0]);
//Console.WriteLine("테이블 명 : " + dataSet.Tables[1]);

//컬럼 명 출력
Console.WriteLine("컬럼 명");
foreach (DataColumn dc in dataSet.Tables[0].Columns)
{
    Console.Write(dc.ColumnName + " ");
}
Console.WriteLine();
}

'.NET > ADO.NET' 카테고리의 다른 글

DB모델링  (0) 2010.05.28
SqlDataAdapter  (0) 2010.04.02
DataView  (0) 2010.04.02
SqlDataReader  (1) 2010.04.02
SqlParameter 클래스  (0) 2010.03.31
Posted by 아몰라
2010. 4. 2. 20:21

DataView는 데이터 바인딩 응용 프로그램에서 자주 사용되는 기능으로, 이 기능을 사용하면 DataTable에 저장되어 있는 데이터에 대해 서로 다른 뷰를 만들 수 있습니다. DataView를 사용하여 테이블의 데이터를 다른 정렬 순서로 노출시킬 수 있으며, 행 상태에 따라 또는 필터 식을 기준으로 데이터를 필터링할 수 있습니다.

DataView에서는 원본 DataTable의 데이터에 대한 동적 뷰를 제공합니다. 따라서 변경이 발생할 경우 DataTable의 내용, 순서 및 멤버에 해당 변경 사항이 적용됩니다. 이 동작은 특정 필터 및/또는 정렬 순서에 따라 테이블에서 DataRow 배열을 반환하는 DataTableSelect 메서드와는 다릅니다. 이내용은 원본으로 사용하는 테이블의 변경 사항을 적용하기는 하지만 해당 멤버 및 순서는 정적으로 유지됩니다. DataView의 동적 기능은 데이터 바인딩 응용 프로그램에 사용하기에 아주 적합합니다.

DataView에서는 단일 데이터 집합에 대한 동적 뷰를 제공하는데 이 동적 뷰에는 데이터베이스 뷰와 매우 유사하게 여러 가지 정렬 및 필터링 기준을 적용할 수 있습니다. 그러나 데이터베이스 뷰와 달리 DataView는 테이블로 취급될 수 없고 조인된 테이블의 뷰도 제공할 수 없습니다. 또한 소스 테이블에 있는 열을 제외하거나 계산을 통해 만들어지는 열과 같이 소스 테이블에 없는 열을 추가할 수 없습니다.

DataViewManager를 사용하여 DataSet의 모든 테이블에 대한 뷰 설정을 관리할 수 있습니다.DataViewManager에서는 각 테이블에 대한 기본 뷰 설정을 관리할 수 있는 편리한 방법을 제공합니다. 컨트롤을 둘 이상의 DataSet 테이블에 바인딩할 때는 DataViewManager에 바인딩하는 것이 좋습니다.


예제 - msdn 참고

출처 :  ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.ko/wd_adonet/html/0fe5dfa2-c1cd-435f-90b6-b4dd2e3ef34b.htm

'.NET > ADO.NET' 카테고리의 다른 글

SqlDataAdapter  (0) 2010.04.02
DataSet  (0) 2010.04.02
SqlDataReader  (1) 2010.04.02
SqlParameter 클래스  (0) 2010.03.31
SqlCommand 클래스  (0) 2010.03.31
Posted by 아몰라
2010. 4. 2. 19:12
SQlDataReader - SQL Server 데이터베이스 에서 데이터를 가져올수 있게 해주는 클래스



주요 메소드

Close - SqlDataReader 개체를 닫음
NextResult - SqlDataReader를 다음 결과로 이동한다.
Read - SqlDataReader를 다음 레코드로 이동한다.



 string connString = "server = 504-12\\SQL2005;database=tempdb;";

 connString = connString + "uid=Man;password=0000;";
 SqlConnection sConnection = new SqlConnection(connString);
 SqlCommand myCom = new SqlCommand(null, sConnection);

 myCom.Connection = sConnection;

 myCom.CommandText = "select * from j_table";
 myCom.Connection.Open();

SqlDataReader sdr  = myCom.ExecuteReader();

// SqlDataReader를 만들려면, 생성자를 직접 사용하지 않고 SqlCommand 개체의ExcuteReader 메서드를 호출해야 한다.

데이터 가져오는 방법1 - Item 속성 이용

            while (sdr.Read()) //다음 레코드가 없을때까지 계속 돌린다.
            {
                Console.Write("m_id : " + sdr["m_name"].ToString());
                Console.Write("   m_age : " + sdr["m_age"].ToString());
                Console.WriteLine();
            }

데이터 가져오는 방법2 - Get+ 데이터 이용 , 처리효율이 높다!

            while (sdr.Read()) //다음 레코드가 없을때까지 계속 돌린다.
            {
                Console.Write("m_id : " + sdr.GetString(0).ToString());
                Console.Write("   m_age : " + sdr.GetInt16(0).ToString());
                Console.WriteLine();
            }                       
            
            sdr.Close();   // SqlDataReader를 사용하고있으면 SqlConnection에서 다른 작업을 할 수 없으므로 Close메소드를 호출해준다.

            myCom.CommandText = "select count(*) from j_table";
            Console.WriteLine("count : " + myCom.ExecuteScalar().ToString());  //쿼리를 실행한 결과를 반환
            myCom.Connection.Close();

'.NET > ADO.NET' 카테고리의 다른 글

DataSet  (0) 2010.04.02
DataView  (0) 2010.04.02
SqlParameter 클래스  (0) 2010.03.31
SqlCommand 클래스  (0) 2010.03.31
Connetion  (0) 2010.03.31
Posted by 아몰라