380 likes | 676 Views
4. DataSet 과 DataAdapter. 4.1 DataSet 과 DataAdapter 의 관계. .NET 데이터 공급자. DataSet. DataTableCollection. Connection. DataAdapter. DataTable. Transaction. SelectCommand. DataRowCollection. InsertCommand. Command. DataColumnCollection. UpdateCommand. Transaction.
E N D
4.1 DataSet과 DataAdapter의 관계 .NET 데이터 공급자 DataSet DataTableCollection Connection DataAdapter DataTable Transaction SelectCommand DataRowCollection InsertCommand Command DataColumnCollection UpdateCommand Transaction ConstraintCollection DeleteCommand DataReader DataRelationCollection Database XML
.Net에서 이용되는 데이터 구조 DataReader Command 연결지향 Database DataSet Connection DataAdapter 비연결지향
update() DataAdapter SelectCommand InsertCommand DataSet UpdateCommand DeleteCommand Fill() FillSchema() 4.2 DataAdapter 속성과 함수 • DataAdapter 속성 • DeleteCommand • 삭제 명령을 사용하는 Command 필드 • InsertCommand • 입력 명령을 사용하는 Command 필드 • SelectCommand • 조회 명령을 사용하는 Command 필드 • UpdateCommand • 수정 명령을 사용하는 Command 필드 • DataAdapter 주요 함수 • Fill() • 데이터 원본에 있는 데이터를 DataSet의 DataTable에 넣어준다. • FillSchema() • 데이터 원본의 스키마에 맞게 DataSet에 DataTable을 생성한다. • Update() • DataSet의 DataTable에서 변경된 데이터를 원본에 반영시킨다.
DataTable DataTable DataTable .Net DataSet 구성요소 DataRow DataRow DataRow DataColumn DataColumn DataColumn Constraint Constraint Constraint DataRelation DataRelation DataRelation DataTable DataRow DataColumnCollection DataColumnCollection DataSet의 개념상의 구성요소 DataTableCollection DataColumn DataSet Constraint DataColumnCollection DataColumnCollection DataColumnCollection DataColumnCollection DataRelation DataRowCollection DataColumnCollection DataColumn DataColumn DataColumn DataTable DataRow DataTable DataTable DataRow DataTable DataRow 4.3 DataSet의 구성요소
DataSet의 계층구조 DataSet DataColumnCollection DataColumnCollection DataTableCollection DataTable DataColumnCollection DataColumnCollection DataColumnCollection DataColumnCollection DataColumnCollection DataRowCollection DataColumn DataRow
4.4 DataSet을 만드는 방법 I • Connection 생성 및 Open • string conStr = "Server=localhost;user id=sa;password=;database=northwind"; • SqlConnection conn = new SqlConnection(conStr); • conn.Open(); • DataAdapter 생성 • SqlDataAdapter adapter = new SqlDataAdapter(); • SqlCommand 할당 • string query = "select * from Address"; • adapter.SelectCommand = new SqlCommand(query, conn); • DataSet 생성 • DataSet ds = new DataSet(); • DataAdapter를 이용해서 DataSet 채우기 • adapter.Fill(ds); • 작업수행 • 연결 닫기 • conn.Close();
4.5 DataSet으로 작업하기 • Connenction 생성과 Open • string conStr = "Server=localhost;user id=sa;password=;database=northwind"; • SqlConnection conn = new SqlConnection(conStr); • conn.Open(); • SqlDataAdapter 생성 • SqlDataAdapter adapter = new SqlDataAdapter(); • Adapter에 SelectCommand 할당 • string query = "select * from Address"; • adapter.SelectCommand = new SqlCommand(query, conn); • DataSet 생성 • DataSet ds = new DataSet(); • Adapter를 통해서 DataSet 채우기 • adapter.Fill(ds); • Connection 닫기 • conn.Close(); • DataSet으로 작업하기 • DataTable table= ds.Tables[0]; • DataRowCollection rows = table.Rows; • foreach (DataRow dr in rows){ • for (int i = 0; i<table.Columns.Count; i++) • Console.Write("{0,15}",dr[i]); • Console.WriteLine(); • } DataSet의 계층구조 DataSet DataColumnCollection DataColumnCollection Tables DataTableCollection DataTable DataColumnCollection DataColumnCollection DataColumnCollection DataColumnCollection DataColumnCollection DataRowCollection DataColumn DataRow Rows Columns
4.6 DataSet을 만드는 방법 II • Connection 생성 및 Open • string conStr = "Server=localhost;user id=sa;password=;database=northwind"; • SqlConnection conn = new SqlConnection(conStr); • conn.Open(); • DataSet 만들기 • SqlDataAdapter adapter = new SqlDataAdapter("select * from Address", conn); • DataSet ds = new DataSet("MyAddressDataSet");//DataSet의 이름 • adapter.Fill(ds);//테이블의 이름 • conn.Close(); • DataSet으로 작업하기 • DataTable table = ds.Tables[0]; • DataRowCollection rows = table.Rows; • foreach (DataRow dr in rows){ • for (int i = 0; i<table.Columns.Count; i++) • Console.Write("{0,15}",dr[i]); • Console.WriteLine(); • } SqlDataAdapter adapter = new SqlDataAdapter(); string query = "select * from Address"; adapter.SelectCommand = new SqlCommand(query, conn); DataSet ds = new DataSet();
DataColumnCollection DataColumnCollection DataTableCollection 4.7 DataSet의 Update() • DataSet에서 InsertCommand 명령을 수행하는 방법 • DataSet 자체에 레코드를 삽입한다. • DataAdapter에 SqlCommand를 지정한다. • DataAdapter를 이용해서 DataSet을 데이터베이스로 업데이트한다. DataSet의 InsertCommand 명령 수행 DataSet Database DataAdapter에 SqlCommand 지정 DataRow 2 1 DataTable (Insert 문장) 새로운 Row 삽입 DataRow row = table.NewRow(); row["id"] = "8"; row["name"] = "Uncle"; row["addr"] = "Ameria"; table.Rows.Add(row); 3 DataAdpater를 이용해서 Update()
SqlDataAdapter adapter = new SqlDataAdapter("select * from Address", conn); • DataSet ds = new DataSet("MyAddressDataSet");//DataSet의 이름 • adapter.Fill(ds, "Address");//테이블의 이름 • conn.Close(); • DataTable table = ds.Tables["Address"]; • //1. DataRow 생성하여 Row를 삽입하기 • DataRow row = table.NewRow(); • row["id"] = "8"; • row["name"] = "Uncle"; • row["addr"] = "Ameria"; • table.Rows.Add(row); • //2. SqlCommand 지정하기 • conn.Open(); • string strSql="Insert into Address(id, name, addr)values(@id, @name, @addr)"; • adapter.InsertCommand = new SqlCommand(strSql, conn); • adapter.InsertCommand.Parameters.Add("@id", SqlDbType.TinyInt, 0, "id"); • adapter.InsertCommand.Parameters.Add("@name", SqlDbType.Char, 20, "name"); • adapter.InsertCommand.Parameters.Add("@addr", SqlDbType.Char, 40, "addr"); • //3. DataAdapter를 이용하여 DataSet 업데이트하기 • adapter.Update(ds, "Address"); • conn.Close();
4.8 DataSet 병합하기 • DataSet 병합하기 • 두개의 DataSet을 결합해서 하나의 DataSet으로 만든다. • DataSet 병합과정 • 두개의 DataSet에 데이터가 들어있다고 가정 • DataSet ds1 = new DataSet(); • DataSet ds2 = new DataSet(); • 두개의 DataSet을 병합하기 위해서는 Merge() 함수 사용 • ds1.Merge(ds2); • ds1은 ds2와 병합된 데이터가 들어있다. • ds1의 복사본 만들기 • DataSet dsc = ds1.Copy();
4.9 DataSet의 관계 설정 • DataTable 생성 • DataTable publicTable = new DataTable("publics"); • publicTable.Columns.Add(new DataColumn("publicID", typeof(int))); • publicTable.Columns.Add(new DataColumn("Name", typeof(string))); • publicTable.Constraints.Add( new UniqueConstraint("PK_Publics", publicTable.Columns[0])); • publicTable.PrimaryKey = new DataColumn[ ]{publicTable.Columns[0]} ; • DataTable bookTable = new DataTable("Book"); • bookTable.Columns.Add(new DataColumn("BookID", typeof( int))) ; • bookTable.Columns.Add(new DataColumn("Name", typeof( string))) ; • bookTable.Columns.Add(new DataColumn("publicID", typeof ( int))) ; • bookTable.Constraints.Add(new UniqueConstraint("PK_Book", bookTable.Columns[0])) ; • bookTable.PrimaryKey = new DataColumn[ ] { bookTable.Columns[0] } ; • DataSet에 DataTable 삽입 • DataSet ds = new DataSet("publication"); • ds.Tables.Add (publicTable) ; • ds.Tables.Add (bookTable) ; • Relation 설정 • ds.Relations.Add ("Books", ds.Tables["publics"].Columns["publicID"], • ds.Tables["Book"].Columns["publicID"]) ;
4.13 DataSet의 추가 자료 • 형식화된 DataSet으로 작업하기 • Solution Explorer의 프로젝트에서 마우스 오른쪽 버튼 클릭 후 [Add]-[New Item]
템플릿 목록 중 데이터 집합을 선택 • 이름을 “Customer.xsd”로 변경
Server Explorer에서 해당 테이블로 이동 • Customer, Orders 테이블을Customer.xsd로 드롭 • Customer 테이블에서 CustomerID 필드를 드래그하여 Orders 테이블의 CustomerID로 드롭
관계 편집 대화 상자가 표시되면 이름을 CustOrders로 변경
Form2에서 DataSet 컨트롤을 드롭 • 데이터 집합 추가 대화 상자에서 Typed dataset을 선택
Form2의 소스 수정 • myDataSet변수의 선언부분 변경
Form2의 소스 수정 • btnGet_Click 메서드에 추가 • 이전 DataSet 데이터 형식을 사용한 부분을 주석처리
SqlDataAdapter와 SqlCommandBuilder를 이용하여 데이터 추가, 수정, 삭제하기 • SqlCommandBuilder 변수 선언
이벤트 생성 • Get Data버튼 컨트롤 더블 클릭 후 btnGetData_Click메서드 코드 추가
Save Changes버튼 컨트롤 더블 클릭 후 btnSaveChanges_Click메서드 코드 추가
저장 프로시저 이용하기 • 폼 디자인 설정
이벤트 생성 • Call SP 버튼 컨트롤 더블 클릭 후 btnSP_Click메서드 코드 추가
Microsoft ActiveX Data Objects 참조 추가하기 • Solution Explorer의 Reference 항목을 오른쪽 마우스 버튼을 클릭한 다음 참조 추가를 선택
참조 추가 대화 상자에서 COM 탭으로 전환 • 구성 요소 이름 목록에서 Microsoft ActiveX Data Objects 2.7 Library를 선택
ADO Recordset을 DataSet으로 로딩하기 • Solution Explorer의 프로젝트에서 마우스 오른쪽 버튼 클릭 후 [Add]-[Windows Form]
이벤트 생성 • Load Recordset버튼 컨트롤 더블 클릭 후 btnLoadRS_Click메서드 코드 추가