Chapter 14 ADO.NET
학습목표 ADO.NET 은데이터베이스사용의편의를위해, MS 사가만든표준데이터베이스인터페이스이다. 프로그램을한다는것에있어서빠질수없는부분이데이터베이스부분이다. ADO.NET 의 C# 에서활용을학습하도록한다. 2
ADO.NET 의개요 ADO.NET.NET 에서데이터베이스조작에관련된.NET 클래스들의집합 다양한방법으로데이터베이스를검색, 수정, 업데이트등의작업가능 ADO 의발정형태 Com InterOperation 서비스를통해서기존의 ADO 를사용.NET 의부가적인기능포함 ADO.NET 이 ADO 와비교해개선된사항.NET 기반의다양한언어지원 XML 지원 Framework 상에서일관된포맷으로지원 단절된데이터구조를표준으로사용 connection 이끊어진상태에서작업, 소형메모리데이터베이스모델지원 3
ADO.NET 의개요 ADO.NET 과관련된네임스페이스 System.Data System.Data.Common System.Date.Oledb System.Dara.SqlClient ADO.NET 의기본구조 구조적으로.NET Data Provider 와 DataSet 의두부분으로나뉘어짐.NET Data Provider 데이터베이스에연결하고, SQL 문을실행시키는역할 DataSet 데이터베이스의데이터를 DataSet 으로쉽게이식가능 데이터베이스와분리되어 DataSet 만으로도대부분의작업가능 4
ADO.NET 의개요.NET Data Provider 의구성요소 ADO.NET 와기존 ADO 연결지향성 데이터베이스에연결된후데이터베이스와동적으로작업을수행 Command 클래스와관련이깊음 5
ADO.NET 의개요 ADO.NET 와기존 ADO 비연결지향성 메모리데이터베이스와관련이있음 데이터베이스에연결설정후데이터베이스형태로보유하고있으면서메모리데이터베이스마느올작업을수행 데이터베이스와동적으로작업을수행.NET 에서이용되는데이터구조 6
ADO.NET 의개요 ADO.NET 의간략한구조 DataSet 데이터원본과단절 데이터는 Memory In Cash 형태 XML 과의데이터교환.NET 데이터공급자컴포넌트 (.NET Data Provider) Connection : 데이터원본에연결 Command : 검색, 삽입, 수정, 삭제등의명령수행 DataReader : 순방향읽기전용으로연결된결과집합 DataAdapter : 데이터베이스로부터 DataSet 에값을채우거나필요로할때데이터베이스로업데이트가능 7
데이터베이스다루기 데이터베이스공급자의 Connection 설정 1 1. 네임스페이스명시 Sql을사용할때 using System.Data.SqlClient Oledb 를사용할때 using System.Data.OleDb; 8
데이터베이스다루기 데이터베이스공급자의 Connection 설정 2 2. Connection 객체생성 : 생성자에연결프로퍼티설정 Sql 을사용할때 SqlConnection conn; conn = new SqlConnection(Server=localhost;user id=sa;password; database=northwind"); Oledb 를사용할때 OleDbConnection conn; conn = new OleDbConnection(Provider = Microsoft.Jet.OLEDB.4.0; Data Source=test.mdb"); 9
데이터베이스다루기 데이터베이스공급자의 Connection 설정 3 3. Connecton 연결 conn.open(); 4. 작업수행 ( SQL 쿼리작업 ) 5. 연결닫기 conn.close(); 데이터베이스의정보를출력하는예제 [ 코드 14-1] 참조 10
데이터베이스다루기 SqlCommand 클래스 Connection 객체를이용해데이터베이스와연결한후, DB 에필요한명령을전달하거나결과를받아올때사용 SqlCommand 클래스를이용하여수행할수있는명령들 단일값및레코드셋을반환하는 SELECT, CREATE, ALERT, DROP 같은 DDL(Data Definition Language) 명령 GRANT, DENY, REVOKE 같은 DCL(Data Control Language) 명령 INSERT, UPDATE, DELETE 같은 DML(Data Modification Language) 명령 명령 (Command) 에관련된여러가지정보를관리가능 명령수해을위한메서드들포함 11
데이터베이스다루기 SqlCommand 의주요속성들 CommandText 데이터소스에서실행할 SQL 문이나저장프로시저를가져오거나설정 CommandType CommandText 속성이해석될방법을나타내는값을가져오거나설정 Connection SqlCommand 의인스턴스에서사용하는 SqlConnection 을가져오거나설정 Parameters SqlParameterCollection 을가져옴 Transaction SqlCommand 가실행하는트랜잭션을가져오거나설정 12
데이터베이스다루기 SqlCommand 의주요메서드 ExecuteNonQuery() Connection 에대한 SQL 문을실행하고영향을받는행의개수를반환 ExecuteReader() CommandText 를 Connection 에보내고, SqlDataReader 를생성 ExecuteScalar() 쿼리를실행하고쿼리에서반환된결과집합의첫번째행의첫번째열반환 ExecuteXmlReader() CommandText 를 Connection 에보내고, XmlReader 객체를생성 13
데이터베이스다루기 SqlCommand 의 ExecuteNonQuery ExecuteNonQuery() 메서드 SqlCommand 를이용하여데이터베이스에명령을전달하고이를수행 Select 명령을제외한대부분의명령을 ExecuteNonQuery() 를이용하여처리가능 ExecuteNonQuery() 예제 [ 코드 14-2] 참조 14
데이터베이스다루기 SqlCommand 의 Parameter(Insert 문장 ) 1 반복적인데이터베이스의작업이나 SQL 쿼리가복잡할경우, Parameter 를이용 보다효율적작업수행 메모리캐시측면에서성능향상 Parameter 변수 setting 방법과 Parameter 타입의지정예 /* Parameter 변수를셋팅하는방법 */ string query ="Insert into Address values (@ID, @Name, @Address)"; SqlCommand comm = new SqlCommand(query, conn); /* Parameter 타입을지정하는예 */ comm.parameters.add("@id", SqlDbType.TinyInt); comm.parameters.add("@name", SqlDbType.Char); comm.parameters.add("@address", SqlDbType.Char); 각각의 Parameter 는 SQL 문장에서 @ 표시를앞에붙여표시 각각의 Parameter 에타입을지정할때에는 SqlDbType 열거형의멤버를이용 15
데이터베이스다루기 SqlCommand 의 Parameter(Insert 문장 ) 2 Parameter 에값 setting 방법 comm.parameters["@id"].value = 6; comm.parameters["@name"].value = "HongGilDDong"; comm.parameters["@address"].value = "Seoul"; [ 코드 14-3] 참조 Parameter 는 SQL 문장을편리하게사용하기위해모든명령에사용가능 16
데이터베이스다루기 SqlCommand 의 ExecuteReader Select 문장을사용할때이용되는메서드 DB 에연결하고데이터를불러오는순서 1 1. 네임스페이스명시 using System.Data.SqlClient; 2. Connection 객체생성 : 생성자에게연결정보전달, 연결프로퍼티설정 SqlConnection conn; conn = new SqlConnection(Server=localhost;user id=sa;password=;database=northwind"); 17
데이터베이스다루기 DB 에연결하고데이터를불러오는순서 2 3. Connecton 연결 conn.open(); 4. Command 객체생성 : 실행할쿼리와 Connctotion 을인수로함 SqlCommand comm = new SqlCommand("select * from 테이블 ", conn); 5. 데이터읽어오기 SqlDataReader reader = comm.executereader(); 6. 작업수행 7. 연결닫기 conn.close(); 18
데이터베이스다루기 DB 에연결하고데이터를불러오기 [ 코드 14-4] 참조 SqlCommand 의 Parameter(Select 문장 ) Select 문장에서 Parameter 를이용 [ 코드 14-5] 참조 19
DataSet 과 DataAdapter DataSet 과 DataAdapter 의관계 웹프로그래밍의작업에가장큰문제가되는데이터베이스의과부하문제의해결책으로제시되는.NET 의새로운 architecture DataAdapter 속성 필드 DeleteCommand InsertCommand SelectCommand UpdateCommand 설명삭제명령을사용하는 Command 필드입력명령을사용하는 Command 필드조회명령을사용하는 Command 필드갱신명령을사용하는 Command 필드 20
DataSet 과 DataAdapter DataAdapter 주요메서드 메서드 Fill() FillSchema() Update() 설명데이터원본에있는데이터를 DataSet의 DataTable에넣어줌데이터원본의스키마에맞게 DataSet에 DataTable을생성 DataSet의 DataTable에서변경된데이터를원본에반영시킴 DataSet 의구성요소 21
DataSet 과 DataAdapter DataSet 의개념상구성요소 DataSet 의계층구조 22
DataSet 과 DataAdapter DataSet 구성요소의정리 DataSet 전체 DataSet 을담을수있으며, 하나이상의테이블또는전체데이터베이스를담을수있음 DataTable 하나의테이블정보를담을수있음 DataRow 테이블에서하나의행에해당하는값을담고있음 DataColumn 테이블에서하나의열에대한정보를담고있음 DataRelation 두테이블사이에관계설정을담고있음 Constraint 테이블에서값을제어하는규약을담고있음 23
DataSet 과 DataAdapter DataAdapter 와 DataSet 을만드는방법 - 1 1. Connection 과 Query 생성 SqlConnection conn; conn = new SqlConnection(Server=localhost; user id=sa; password=; database=northwind"); String sql = "select * from Address"; 2. DataAdapter 생성 SqlDataAdapter adapter = new SqlDataAdapter(); 3. SqlCommand 할당 adapter.selectcommand= new SqlCommand(sql, conn); 4. DataSet 생성 DataSet ds = new DataSet(); 24
DataSet 과 DataAdapter DataAdapter 와 DataSet 을만드는방법 - 2 4. DataAdapter 를이용하여 DataSet 채우기 adapter.fill(ds); 5. 작업수행 6. 연결닫기 conn.close(); DataAdapter 를만드는다양한방법 public SqlDataAdapter(); public SqlDataAdapter(SqlCommand selectcommand); public SqlDataAdapter(string selectcommandtext, SqlConnection selectconnection); public SqlDataAdapter(string selectcommandtext, string selectconnectionstring); [ 코드 14-6], [ 코드 14-8] 참조 25
DataSet 과 DataAdapter DataSet 으로작업하기 데이터베이스와 connection 이끊어졌더라도 DataSet 을계속적으로이용할수있음 [ 코드 14-7] 참조 DataSet 에서 Command 사용하기 연결이끊어진 DataSet 에서다시데이터베이스의연결을재개하고, InsertCommand 명령을이용하는방법 1. DataSet 자체에레코드를삽입 2. qlcommand 를지정 3. ataset 을데이터베이스로업데이트 26
DataSet 과 DataAdapter Connection 설정문제 Update() 메서드를호출했을때 Connection 객체의상태를확인 닫혀있을경우에는데이터베이스와의연결을열어줌 데이터를업데이트한후데이터베이스와의연결을자동으로닫아줌 데이터베이스와연결이열렸을경우는그연결을유지한채로데이터를채움, 이경우명시적으로연결을닫아주어야함 [ 코드 14-9] 참조 27
DataSet 과 DataAdapter 두개의 DataSet 병합하여사용하기 DataSet 이여러개있을때두개의 DataSet 을병합사용가능 Merge() 메서드이용 [ 코드 14-10] 참조 DataSet 에서의관계설정 RelationShip 데이터베이스내에테이블이여러개존재하고이테이블들간의관계를의미 [ 코드 14-11] 참조 28
학습정리 ADO.NET 은데이터베이스사용의편의를위해, MS 사가만든표준데이터베이스인터페이스이다. MS-SQL 전용으로사용하기위한 SqlClient 공급자와각각의데이터베이스회사들에맞게구현해놓은 OleDb 공급자를이용하여데이터베이스관련프로그램을할수있다. ADO.NET 은기존의 ADO 에 DataSet 의개념과 XML 기능이추가되었다. 기존의데이터베이스의기능을그대로수용하면서보다발전적인모델이바로 ADO.NET 이다. 29