4. DataSet과 DataAdapter.

Slides:



Advertisements
Similar presentations
17. Data Access ADO.Net Architecture New Features of ADO.NET
Advertisements

ADO.Net Modelo para acesso a dados nas aplicação.Net Componentes: DataSet.Net Data providers: Connection Command DataReader DataAdapter.
Coding ADO.Net DataSet Objects ISYS 512. DataSet Object A DataSet object can hold several tables and relationships between tables. A DataSet is a set.
ADO.NET: Working in Disconnected Environment Sergey Baidachni MCT, MCSD, MCDBA.
VB.NET Database Access ISYS546. Microsoft Universal Data Access ODBC: Open Database Connectivity –A driver manager –Used for relational databases OLE.
1 ADO.NET. 2.NET Framework Data Namespaces System.Data –Base set of classes and interfaces for ADO.NET System.Data.Common –Classes shared by the.NET Data.
ADO. NET. What is “ADO.Net”? ADO.Net is a new object model for dealing with databases in.Net. Although some of the concepts are similar to the classical.
.NET Mobile Application Development Data in Distributed Systems Accessing Data with.NET.
C# programming with database Basic guideline. First step Install SQL Server 2008/2010 (Professional edition if possible) Install Visual Studio 2008/2010.
ADO.NET – part II August 2004 [ Marmagna Desai]. CONTENTS ADO vs ADO.NET ADO.NET – Managed providers Connecting to Database SqlConnection Selecting Database.
Chapter 11 Introduction to Database Processing. Class 11: Database Processing Use a Visual Studio Wizard to establish a database connection used to load.
Programming with Visual Basic.NET An Object-Oriented Approach  Chapter 8 Introduction to Database Processing.
ODBC, OLE DB, and ADO Introduction Dr. Ron Eaglin.
OLE Automation In Microsoft Windows applications programming, OLE Automation is an inter-process communication mechanism based on Component Object Model.
Developing Web Applications Using Microsoft ® Visual Studio ® 2008.
A Simple Introduction. What is ADO.net? First the word ADO stands for ActiveX Data Objects And it is an integral part of.Net Framework of Microsoft hence.
Needs for Accessing Database To make your web site more dynamic and maintainable, you can display information on your web pages that are retrieved from.
Databases and Data Access  Introduction to ADO.NET  ADO.NET objects  ADP.NET namespaces  Differences between ADO and ADO.NET.
ADO.Net CS795. What is ADO.Net? Database language spoken by managed applications ADO.net database accesses go through modules: data providers –SQL Server.Net.
.NET Data Access and Manipulation ADO.NET. Overview What is ADO.NET? Disconnected vs. connected data access models ADO.NET Architecture ADO.NET Core Objects.
1 Introduction to ADO.NET Microsoft ADO.NET 2.0 Step by Step Rebecca M Riordan Microsoft Press, 2006.
Copyright ©2004 Virtusa Corporation | CONFIDENTIAL ADO.Net Basics Ruwan Wijesinghe Trainer.
Objectives In this lesson, you will learn to: *Identify the need for ADO.NET *Identify the features of ADO.NET *Identify the components of the ADO.NET.
ASP.NET Rina Zviel-Girshin Lecture 5
Module 9: Accessing Relational Data Using Microsoft Visual Studio.NET.
Session 8: ADO.NET. Overview Overview of ADO.NET What is ADO.NET? Using Namespaces The ADO.NET Object Model What is a DataSet? Accessing Data with ADO.NET.
Presented by Joseph J. Sarna Jr. JJS Systems, LLC
An Introduction to ADO.Net Marmagna Desai.NET Seminar, Fall-2003.
 It is the primary data access model for.Net applications  Next version of ADO  Can be divided into two parts ◦ Providers ◦ DataSets  Resides in System.Data.
1 Data Classes- DataView DataGridView Control. Objectives 2  Data Class  DataAdapter  DataReader  DataSet  DataTable  DataView  DataGridView Control.
C# Programming in Depth Prof. Dr. Bertrand Meyer March 2007 – May 2007 Chair of Software Engineering Lecture 10: Database Lisa (Ling) Liu.
Why ADO.NET Not your father’s Data Access.
Mauricio Featherman, Ph.D. Washington St. University
Accessing Data with Microsoft Visual C# Applications.
Building Data-Centric Smart Client Applications Rajiv Sodhi Microsoft India.
ADO.Net CS795. What is ADO.Net? Database language spoken by managed applications ADO.net database accesses go through modules: data providers –SQL Server.Net.
Module 3: Working with Local Data. Overview Using DataSets Using XML Using SQL Server CE.
1 11/15/05CS360 Windows Programming ADO.NET Continued.
HNDIT Rapid Application Development
Databases – Unit 3 & 4.  SQL is not restricted to a specific database, however in class we will be looking at the two major database programmes in use.
DataSets Demystified. Who I am Shawn Wildermuth Senior Consultant with Magenic Technologies ( C# MVP INETA.
ADO.NET FUNDAMENTALS BEGINNING ASP.NET 3.5 IN C#.
C# .NET Software Development
ADO.NET Objects Data Adapters Dr. Ron Eaglin. Agenda Builds on Information in Part I Should have working knowledge of creating a database connection Continuation.
C# 17장. ADO.NET.
Module 5 Data Classes DataView – DataGridView Control 1.
DataGridView. Displaying data in a tabular format is a task you are likely to perform frequently. The DataGridView control is designed to be a complete.
Introduction to ADO.Net Malek Kemmou CEO Arrabeta
Module 2: Using ADO.NET to Access Data. Overview ADO.NET Architecture Creating an Application That Uses ADO.NET to Access Data Changing Database Records.
Querying Information in a Database. CONTENTS Relational Database Systems Creating Database with SQL Server Reading Data with LINQ Requirements to Get.
제 21 장 : ADO.NET 을 이용한 데이터 접근. ADO.NET - DataSet 사용하기.
Data Access. ADO.NET ADO.NET is the primary library for building database solutions within the.NET Framework. ADO.NET does not replace ADO. ADO and OLEDB.
.NET Data Access and Manipulation
Common SQL keywords. Building and using CASE Tools Data Base with Microsoft SQL-Server and C#
Introduction to Database Processing with ADO.NET
Introduction to Database Processing with ADO.NET
ADO.NET and Stored Procedures
ADO.NET Framework.
Distributed Database Systems
DataSet и SqlDataAdapter
VB.NET Using Database.
ADO.Net and Stored Procedures
Tonga Institute of Higher Education
מתחברים למסד נתונים היכרות עם ADO.Net.
Bài 5: ADO.NET 5.1. Khái niệm 5.2. Các lớp và không gian tên cơ bản của ADO.NET 5.3. Thao tác với dữ liệu kết nối – Connected 5.4. Thao tác với dữ liệu.
برنامه نویسی سیستم های شی گرا
Browser (Client Side) 瀏覽器 (客戶端)
PROG Advanced Web Apps 4/13/2019 Programming Data Pages Wendi Jollymore, ACES.
M S COLLEGE OF ART’S, COMM., SCI. & BMS Advance Web Programming
Introduction to Database Programming through ADO. NET
Presentation transcript:

4. DataSet과 DataAdapter

4.1 DataSet과 DataAdapter의 관계 .NET 데이터 공급자 DataSet Connection DataAdapter DataTableCollection Transaction SelectCommand DataTable DataRowCollection InsertCommand Command DataColumnCollection Transaction UpdateCommand ConstraintCollection DeleteCommand DataReader DataRelationCollection Database XML

.Net에서 이용되는 데이터 구조 DataReader Command Database DataSet DataAdapter 연결지향 Database Connection DataSet DataAdapter 비연결지향

4.2 DataAdapter 속성과 함수 DataAdapter 속성 DataAdapter 주요 함수 DeleteCommand InsertCommand 입력 명령을 사용하는 Command 필드 SelectCommand 조회 명령을 사용하는 Command 필드 UpdateCommand 수정 명령을 사용하는 Command 필드 DataAdapter 주요 함수 Fill() 데이터 원본에 있는 데이터를 DataSet의 DataTable에 넣어준다. FillSchema() 데이터 원본의 스키마에 맞게 DataSet에 DataTable을 생성한다. Update() DataSet의 DataTable에서 변경된 데이터를 원본에 반영시킨다. DataAdapter SelectCommand InsertCommand UpdateCommand DeleteCommand DataSet Fill() FillSchema() update()

DataColumnCollection 4.3 DataSet의 구성요소 .Net DataSet 구성요소 Constraint DataColumn DataRow DataTable DataRelation DataColumn DataRow DataSet의 개념상의 구성요소 DataSet DataTable DataColumnCollection DataRowCollection DataTableCollection

DataSet의 계층구조 DataSet DataTable DataColumn DataRow DataColumnCollection DataTableCollection DataColumnCollection DataTable DataColumnCollection DataColumnCollection DataColumnCollection DataColumnCollection DataRowCollection DataColumnCollection DataColumn DataRow

4.4 DataSet을 만드는 방법 I Connection 생성 및 Open DataAdapter 생성 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 SqlDataAdapter 생성 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 Tables DataColumnCollection DataColumnCollection DataTableCollection DataTable DataColumnCollection DataColumnCollection DataColumnCollection DataColumnCollection DataColumnCollection DataRowCollection DataColumn DataRow Rows Columns

4.6 DataSet을 만드는 방법 II Connection 생성 및 Open DataSet 만들기 DataSet으로 작업하기 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();

DataSet의 InsertCommand 명령 수행 4.7 DataSet의 Update() DataSet에서 InsertCommand 명령을 수행하는 방법 DataSet 자체에 레코드를 삽입한다. DataAdapter에 SqlCommand를 지정한다. DataAdapter를 이용해서 DataSet을 데이터베이스로 업데이트한다. DataSet의 InsertCommand 명령 수행 DataSet DataColumnCollection DataTableCollection 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 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");

4.8 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 생성 DataSet에 DataTable 삽입 Relation 설정 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을 선택

DataGridview의 DataSource 속성을 Customer.Customer로 지정

Form2의 소스 수정 myDataSet 변수의 선언부분 변경 public class Form2 : System.Windows.Forms.Form { SqlConnection mySqlConnection; //DataSet myDataSet; Customer myDataSet; ...

Form2의 소스 수정 btnGet_Click 메서드에 추가 이전 DataSet 데이터 형식을 사용한 부분을 주석처리 private void btnGet_Click(object sender, System.EventArgs e) { mySqlDataAdapter1 = new SqlDataAdapter("select * from customers", mySqlConnection); mySqlDataAdapter2 = new SqlDataAdapter("select * from orders", mySqlConnection); try //myDataSet = new DataSet(); myDataSet = new Customer(); mySqlDataAdapter1.Fill(myDataSet,"Customers"); mySqlDataAdapter2.Fill(myDataSet,"Orders"); // ADD RELATION //myDataSet.Relations.Add("CustOrders",myDataSet.Tables["Customers"].Columns["CustomerId"],myDataSet.Tables["Orders"].Columns["CustomerId"]);

//dataGrid1.DataSource = myDataSet.Tables["Customers"].DefaultView; dataGrid1.DataSource = myDataSet.Customers.DefaultView; } catch(Exception ex) { MessageBox.Show("Unable to retrieve Customer data: " + ex.Message); } ...

SqlDataAdapter와 SqlCommandBuilder를 이용하여 데이터 추가, 수정, 삭제하기 public class Form2 : System.Windows.Forms.Form { SqlConnection mySqlConnection; //DataSet myDataSet; Customer myDataSet; ... SqlCommandBuilder cbCustomers;

폼 디자인 설정 Name: btnSaveChanges Text: Save Changes

이벤트 생성 Get Data 버튼 컨트롤 더블 클릭 후 btnGetData_Click 메서드 코드 추가 private void btnGet_Click(object sender, System.EventArgs e) { ... mySqlDataAdapter1.Fill(myDataSet,"Customers"); mySqlDataAdapter2.Fill(myDataSet,"Orders"); cbCustomers = new SqlCommandBuilder(mySqlDataAdapter);

Save Changes 버튼 컨트롤 더블 클릭 후 btnSaveChanges_Click 메서드 코드 추가 private void btnSaveChanges_Click(object sender, System.EventArgs e) { try mySqlDataAdapter.Update(myDataSet, "Customers"); MessageBox.Show("Changes Recorded Successfully into the Customers table."); } catch(Exception ex) MessageBox.Show("Changes not saved: " + ex.Message);

저장 프로시저 이용하기 폼 디자인 설정 Name: btnSP Text: Call SP

DataGridView 컨트롤의 DataSource 속성을 없음으로 선택

이벤트 생성 Call SP 버튼 컨트롤 더블 클릭 후 btnSP_Click 메서드 코드 추가 private void btnSP_Click(object sender, System.EventArgs e) { try SqlDataAdapter myDataAdapter = new SqlDataAdapter("CustOrderHist", mySqlConnection); myDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure; myDataAdapter.SelectCommand.Parameters.Add(new SqlParameter("@CustomerID", SqlDbType.NVarChar, 5)); myDataAdapter.SelectCommand.Parameters["@CustomerID"].Value = "ALFKI"; DataSet ds = new DataSet(); myDataAdapter.Fill(ds, "Products"); dataGrid1.DataSource=ds.Tables["Products"].DefaultView; } catch(Exception ex) MessageBox.Show("Error occurred: " + ex.Message);

4. ADO Recordset을 DataSet으로 로딩하기

Microsoft ActiveX Data Objects 참조 추가하기 Solution Explorer의 Reference 항목을 오른쪽 마우스 버튼을 클릭한 다음 참조 추가를 선택

참조 추가 대화 상자에서 COM 탭으로 전환 구성 요소 이름 목록에서 Microsoft ActiveX Data Objects 2.7 Library 를 선택

ADO Recordset을 DataSet으로 로딩하기 Solution Explorer의 프로젝트에서 마우스 오른쪽 버튼 클릭 후 [Add]-[Windows Form]

Form3.cs 소스 수정 ... using System.Windows.Forms; using System.Data; using System.Data.SqlClient; using System.Data.OleDb; using ADODB;

폼 디자인 설정 Name: btnLoadRS Text: Load Recordset DataGridview 컨트롤

이벤트 생성 Load Recordset 버튼 컨트롤 더블 클릭 후 btnLoadRS_Click 메서드 코드 추가 private void btnLoadRS_Click(object sender, System.EventArgs e) { try RecordsetClass rsObj = new RecordsetClass(); string constr = "provider=sqloledb;server=localhost;database=Northwind; trusted_connection=yes"; rsObj.Open("Customers",constr,ADODB.CursorTypeEnum.adOpenForwardOnly,ADODB.LockTypeEnum.adLockReadOnly,0x200); DataSet myDataSet = new DataSet(); OleDbDataAdapter adapter = new OleDbDataAdapter(); adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; adapter.Fill(myDataSet, rsObj, “Customers”); dataGrid1.DataSource = myDataSet.Tables[“Customers”].DefaultView; }

catch(Exception ex) { MessageBox.Show("Error occured while retrieving the data: " + ex.Message); }