c# programming version 2.0 ado.net

30
C# Programming C# Programming Version 2.0 Version 2.0 ADO.NET ADO.NET 김 김 김 (MCSD .Net, MCSE, MCDBA,SCJP)

Upload: sanaa

Post on 12-Feb-2016

90 views

Category:

Documents


6 download

DESCRIPTION

C# Programming Version 2.0 ADO.NET. 김 규 태 ( MCSD .Net, MCSE, MCDBA,SCJP). 학 습 목 표. ADO.NET 개요 ADO.NET 관련 네임스페이스 Data Provider DataBase 연결 (Connection) DataBase 조작 (Command) Data 가져오기 (DataReader) DataTable, DataColumn, DataRow Class DavaView Class DataSet Class - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: C# Programming Version 2.0 ADO.NET

C# ProgrammingC# ProgrammingVersion 2.0Version 2.0

ADO.NETADO.NET

김 규 태(MCSD .Net, MCSE, MCDBA,SCJP)

Page 2: C# Programming Version 2.0 ADO.NET

학 습 목 표

1. ADO.NET 개요2. ADO.NET 관련 네임스페이스3. Data Provider4. DataBase 연결 (Connection)5. DataBase 조작 (Command)6. Data 가져오기 (DataReader)7. DataTable, DataColumn, DataRow Class8. DavaView Class9. DataSet Class10.DataAdapter Class

Page 3: C# Programming Version 2.0 ADO.NET

1. ADO.NET 개요 (1/2)

DB

WinForm

WebForm

Other

Connection

DataAdpter

Command

DataReader

DataSet

Data Provider Data Consumers

Page 4: C# Programming Version 2.0 ADO.NET

1. ADO.NET 개요 (2/2)

ADO.NET 아키텍처

Page 5: C# Programming Version 2.0 ADO.NET

2. ADO.NET 관련 네임스페이스

System.Data 데이터 관련 클래스 (ADO.NET 필수클래스 )System.Data.Common 데이터 공유 클래스

(Data Provider 간에 공유되는 타입 )System.Data.OleDb OleDb 제공 클래스

System.Data.SqlClient MSSQL 서버 제공 클래스

System.Data.SqlTypes MSSQL 서버 기본 데이터 형식 클래스

네임스페이스 포함하고 있는 클래스

3. Data Provider역할 SQL

데이터베이스 연결 OleDbConnection SqlConnectionSQL 명령수행 OleDbCommand SqlCommand데이터 읽어오기 OleDbDataReader SqlDataReader데이터 전송 OleDbDataAdapter SqlDataAdaper

OleDB

Page 6: C# Programming Version 2.0 ADO.NET

4. 데이터베이스 연결 (Connection) 1/5

① Connection 객체 생성

② 데이터베이스 연결 문자열 지정 (DNS)③ Connection 객체의 Open 메서드를 호출해 데이터베이스 연결

④ Connection 객체의 Close 메서드를 호출해 데이터베이스 연결해제

ConnectionString 데이터베이스 연결 문자열

ConnectionTimeout 데이터베이스를 연결하려는 동안 대기시간

Database 현재 연결해 사용할 데이터베이스 이름

DataSource 연결한 SQL Server 인스턴스 이름

ServerVersion 클라이언트가 연결될 SQL Server 인스턴스 버전을 포함한 문자열

State 현재 연결 상태 반환

속 성 설 명

Page 7: C# Programming Version 2.0 ADO.NET

4. 데이터베이스 연결 (Connection) 2/5

ConnectionString

ConnectionTimeout- 연결할 동안 기다리는 시간 ( 기본값은 15 초 )- 0 으로 설정하면 연결시도를 무기한 대기

SqlConnection conn = SqlConnection();conn.ConnectionString = “Server =localhost;database=PUBS;UID=sa;PWD=;” ;

conn.ConnectionString = “Server =localhost;database=PUBS;UID=sa;PWD=;” ;

conn.ConnectionString = “Addr=127.0.0.1;InitialCatalog=PUBS;uid=sa;pwd=;“ ;

conn.ConnectionString = “dataSource=127.0.0.1;database=PUBS;uid=sa;pwd=;” ;

Page 8: C# Programming Version 2.0 ADO.NET

Connection 클래스 멤버 메소드

4. 데이터베이스 연결 (Connection) 3/5

ChangeDatabase 열려있는 SqlConnection 에 대해 현재 DB 를 변경

Close DB 연결 종료CreateCommand SqlCommand 개체 생성Open DB 연결Dispose SqlConnection 리소스 해제

메서드 설명

Page 9: C# Programming Version 2.0 ADO.NET

4. 데이터베이스 연결 (Connection) 4/5

ex) MS-SQL 연결using System;using System.Data;using System.Data.SqlClient;

class ConsoleConnection{

static void Main(string[] args){

SqlConnection conn = new SqlConnection();conn.ConnectionString = "Server=localhost;database=ADO;uid=sa;pwd=;" ;try{

conn.Open();Console.WriteLine(" 데이터베이스 연결 성공 ..");

}catch(Exception ex){

Console.WriteLine(" 데이터베이스 연결 실패 ..");}finally{

if(conn != null){

conn.Close();Console.WriteLine(" 데이터베이스 연결 해제 .. ");

}}

}}

Page 10: C# Programming Version 2.0 ADO.NET

4. 데이터베이스 연결 (Connection) 5/5

ex) OLE DB 연결using System;using System.Data;using System.Data.OleDb;

class ConsoleConnection2{

static void Main(string[] args){ string source = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\ado.mdb" ; OleDbConnection conn = new OleDbConnection(source); try { conn.Open();

Console.WriteLine(" 데이터베이스 연결 성공 ..."); } catch(Exception ex) { Console.WriteLine(" 데이터베이스 연결 실패 ..."); } finally { if(conn != null) {

conn.Close();Console.WriteLine(" 데이터베이스 연결 해제 ...");

}}

}}

Page 11: C# Programming Version 2.0 ADO.NET

5. 데이터베이스 조작 (Command) 1/5

① 데이터베이스연결 : Connection 객체생성

② 명령 수행 준비 : Command 객체 생성

③ 속성지정 : Command 객체의 CommandText 속성지정

( 쿼리 , 저장프로시저 , 테이블 )④ SQL 쿼리문 실행 : Execute() 를 통해 쿼리문 실행

Command 클래스 생성자

public SqlCommand();public SqlCommand(string commandText);

public SqlCommand(string commandText, SqlConnection connection);public SqlCommand(string commandText, SqlConnection connection, SqlTransaction transaction );

Page 12: C# Programming Version 2.0 ADO.NET

5. 데이터베이스 조작 (Command) 2/5

Command 클래스 속성

CommandText 실행할 SQL 쿼리문이나 저장프로시저CommandTimeout DB 명령 실행 대기 시간CommandType CommandText 타입을 지정 ( 쿼리 ,

저장프로시저 , 테이블 )Parameters 쿼리문이나 저장프로시저에 사용할 매개변수가

포함된 ParameterCollection 을 가져옴Transaction 트랜잭션 처리 속성Connection 연결되어 있는 Connection 인스턴스

속 성 설 명

Page 13: C# Programming Version 2.0 ADO.NET

5. 데이터베이스 조작 (Command) 3/5

CommandTextSqlCommand cmd = new SqlCommand(); cmd.CommandText = “select * from member where user =“david”;cmd.CommandType = CommandType.Text;

CommandType (Text;StroreProcedure;TableDirect)OleDB 전용

cmd.CommandText = “member”;cmd.CommandType = CommandType.TableDirect;

cmd.CommandText = “select * from member”;cmd.CommandType = CommandType.Text;

Page 14: C# Programming Version 2.0 ADO.NET

5. 데이터베이스 조작 (Command) 4/5

Command 클래스 멤버 메소드

CreateParameter Parameter 생성Prepare 데이터베이스 캐쉬에 쿼리문저장Close 데이터베이스 연결 종료ExecuteNonQuery 데이터 명령 수행 (DB 의 내용변경시 )

( 변경된 레코드 수를 반환 )ExcuteReader 데이터 레코드를 Reader 게체로 읽어옴

( 주로 select 쿼리 수행 )ExecuteScalar 쿼리문의 첫번째 열을 반환

( 반환되는 결과값이 하나만 요구될때 , object형 으로 반환됨 )

ReSetCommadnTimeout CommandTimeout 프로퍼티를 30 초로 재설정

Cancel 실행중인 명령을 취소함

메서드 설명

Page 15: C# Programming Version 2.0 ADO.NET

5. 데이터베이스 조작 (Command) 5/5

CreateParameter

SqlCommand cmd = new SqlCommand(); ........SqlParameter param = cmd.CreateParameter();param.ParameterName = “@name”;param.SqlDbType = SqlDbType.Varchar;param.Size = 10;param.Value = “korea”;

매개변수를 사용하는 쿼리문 , 저장 프로시저를 위해 매개변수를 지정할 수 있는 Parameter 개체를 생성할 때 호출

Page 16: C# Programming Version 2.0 ADO.NET

6. 데이터 가져오기 (DataReader) 1/4

DataReader 클래스 생성자public SqlDataReader ExecuteReader();

SqlConnection conn = new SqlConnection();

SqlCommand cmd = new SqlCommand (“selelct * from member”, conn);

SqlDataReader read = cmd.ExecuteReader();

Page 17: C# Programming Version 2.0 ADO.NET

6. 데이터 가져오기 (DataReader) 2/4DataReader 클래스 속성

FieldCount 현재 레코드의 필드 ( 수 ) 를 반환IsClosed DataReader 개체가 닫혀있는지 반환RecordsAffected 데이터를 조작할 경우 DB 에서 바뀐 레코드 수

반환Item DataReader 개체의 반환된 필드를 지정하는 배열

속 성 설 명

FieldCountSqlCommand cmd = new SqlCommand(“select * from memner”, conn); SqlDataReader read = cmd.ExcuteReader();Console.WriteLine(“member 의 전체칼럼 개수 : {0}”, read.FieldCount);

RecordsAffected

SqlCommand cmd = new SqlCommand(“update member set id=david”, conn); SqlDataReader read = cmd.ExcuteReader();Console.WriteLine(“ 변경된 레코드 개수 : {0}”, read.RecordsAffected);

Page 18: C# Programming Version 2.0 ADO.NET

6. 데이터 가져오기 (DataReader) 3/4

Item

SqlCommand cmd = new SqlCommand(“select * from memner”, conn); SqlDataReader read = cmd.ExcuteReader();while(read.Read()){ Console.WriteLine(read[“id”] + “\t” +

read[“pwd”] + “\t” + read[“name”]);

Console.WriteLine(read[0] + “\t” +

read[1] + “\t” + read[2]);

}

public object this [string name] {get;} // 칼럼 ( 필드 ) 명 사용public object this [int i] {get;} // 서수 사용 -> 서수는 0 부터 사용

read[ 칼럼명 ] orread[ 서수 ]

두가지 형식으로 사용가능

Page 19: C# Programming Version 2.0 ADO.NET

6. 데이터 가져오기 (DataReader) 4/4

DataReader 클래스 멤버 메소드

Read 레코드 커서를 다음 레코드로 이동

NextResult 여러개의 레코드 셋에서 다음 레코드셋으로 이동

GetName 레코드셋의 필드이름을 반환

GetOrdinal 레코드셋의 필드 서수 값 반환

GetValue 특정필드의 값을 출력함

GetValues 현재 레코드의 모든 필드 값을 배열 형태로 반환

GetXXX 레코드셋의 레코드를 XXX( 데이터형 ) 함수를 이용해서 가져옴

Close DataReader 개체를 닫음

메서드 설명

Page 20: C# Programming Version 2.0 ADO.NET

7. DataTable, DataColumn, DataRow 클래스 1/5

DataTable 데이터 테이블

DataCoumn DataTable 에서 특정 Column 을 나타낼 때 사용

DataRow DataTable 에서 특정 Row 을 나타낼 때 사용

System.Data 타입 설명

DataColumn

User 칼럼을 만들고 Type 을 System.String 형으로 지정할 경우 (1)

DataColumn col =

new DataColumn(“User”, Type.GetType(“System.String”));

Page 21: C# Programming Version 2.0 ADO.NET

7. DataTable, DataColumn, DataRow 클래스 2/5

DataColumn

User 칼럼을 만들고 Type 을 System.String 형으로 지정할 경우 (2)

DataColumn col = new DataColumn(); col.DataType = Type.GetType(“System.String”);col.Caption = “ 데이터칼럼” ;col.ColumnName = “User”;col.AllowDBNull = false;col.ReadOnly = true;col.Unique = true;

이름이 NUM 이며 Primary Key 속성과 자동증가 속성을 갖는 칼럼

DataColumn col = new DataColumn(); col.ColumnName = “NUM”;col.AutoIncrement = true;col.AutoIncrementSeed = 100; // 자동증가초기값을 100 으로col.AutoIncrementStep = 10; // 한번에 증가되는 값을 10 으로

Page 22: C# Programming Version 2.0 ADO.NET

7. DataTable, DataColumn, DataRow 클래스 3/5

DataRow 클래스 생성자DataRow row = DataTable.NewRow(); // 단독생성 불가

DataRow 클래스 속성

DataRowState 열거형 해당 레코드의 상태를 표시할 때 사용

ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ko/cpref4/html/T_System_Data_DataRow_Properties.htm

ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ko/cpref4/html/T_System_Data_DataRowState.htm

DataRowState 를 사용한 예제

(ex)DataRowExam.cs

Page 23: C# Programming Version 2.0 ADO.NET

7. DataTable, DataColumn, DataRow 클래스 4/5

DataTable 클래스 생성자DataTable table = new DataTable(“Member”);

DataTable 클래스 속성ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ko/cpref4/html/T_System_Data_DataTable_Properties.htm

DataTable 클래스

DataTable 은 메모리내에서 존재하는 테이블

DataTable 은 직접작성가능하나 , Sql 서버나 OLE DB 에서 만들어진 데이블정보를 DataAdapter 클래스와 DataSet 클래스를 참고해 작성

PrimaryKeyDataTable table = new DataTable(“member”);DataColumn[] pk = new DataColumn[3];pk[0] = table.Columns[“ID”];pk[1] = table.Columns[“PWD”];pk[2] = table.Columns[“NAME”];table.PrimaryKey = pk;

Page 24: C# Programming Version 2.0 ADO.NET

7. DataTable, DataColumn, DataRow 클래스 5/5

DataTable 클래스 메서드

ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ko/cpref4/html/T_System_Data_DataTable_Methods.htm

AcceptChanges()

DataTable 에 레코드를 추가 /갱신 /삭제할 경우 내부 데이터는 실제 변경되지 않음

다만 , DataRow 의 RowState 값만이 변경 .실제 테이블에 변경된 내용을 적용하기 위해 AcceptChanges() 호출

Page 25: C# Programming Version 2.0 ADO.NET

8. DataView 클래스

DataTable 클래스 생성자public DataView DataView(DataTable tbl);

View 는 DB 안에 실제로 존재하는 Table 이 아니라 select 쿼리문 형태로 저장되어 있다가 필요할 경우에만 메모리에 생겼다 소멸되는 임시 테이블

View 를 이용하면 복잡한 쿼리문을 단순화시켜 개발가능

DB 에서의 View 기능을 DataView 클래스를 통해 구현

DataView 는 DataTable 로부터 특정 필드와 레코드 정보를 가져오고 , DataGrid 같은 Data Binding 컨트롤에 출력

Page 26: C# Programming Version 2.0 ADO.NET

9. DataSet 클래스

DataSet 클래스는 비연결 지향상태에서 질의결과 수행 가능

DataSet = 메모리 DataBase

DataSet 을 통해 실제 DB 의 종류와 상관없이 DataAdapter 객체를 통해 메모리상에 해당자료( 테이블 , 칼럼 , 레코드정보 ) 를 저장 가능DB 에 하나이상의 Table 이 있듯이 , DataSet 은 1 개 이상의 DataTable 개체를 소유

DataRelation 클래스를 이용한 Table 간의 관계설정

DataSet data = new DataSet();DataColumn col_Parents = data.Tables[0].Columns[0];DataColumn col_Child = data.Tables[1].Columns[0];

DataRelation relation = new DataRelation(“Relation”, col_Parents, col_Child);

data.Relation.Add(relation);

//data.Relations.Add(“Relation”,data.Tables[0].Columns[0]),data.Tables[1].Columns[0]);

Page 27: C# Programming Version 2.0 ADO.NET

10. DataAdapter 클래스

ADO.NET 에서 DB 의 자료를 가져오는 두가지 방법 (DataReader / DataAdapter)

쿼리문을 통해 읽어오는 data 는 주로 DataReader 사용

DB 에서 읽어오는 시간은 상대적으로 빠름

DB 와의 연결상태 유지로 인해 시스템자원낭비

비 연결지향 (DataSet) 을 사용할 때

DataAdapter/DataSet 을 사용하면 초기Data 로딩은 느린편

필요한 경우에만 DB 와 연결됨으로 인해시스템 자원 낭비 최소화

DataAdapter 는 DB 에서 data 를 가져와 DataSet 의 DataTable 을 생성하고 레코드를 추가

DataAdapter / DataSet 은 N-Tier 응용프로그램 개발 / 웹서비스 사용 / 여러 테이블 정보를 동적으로 처리할

경우 Data Cache( 메모리 데이터베이스 ) 로 사용할 경우 / XML 문서를 이용한 데이터 처리 등의 경우 주로 사용

Page 28: C# Programming Version 2.0 ADO.NET

10. DataAdapter 클래스

DataReader 클래스 생성자

public SqlDataAdapter();public SqlDataAdapter(SqlCommand selectCommand);public SqlDataAdapter(string selectCommandText, SqlConnection

selectConnection);public SqlDataAdapter(string selectCommandText, string

selectConnectionString)

DeleteCommand 데이터를 삭제할 경우InsertCommand 데이터를 입력할 경우SelectCommand 데이터를 검색할 경우UpdateCommand 데이터를 갱신할 경우

속 성 설 명

Page 29: C# Programming Version 2.0 ADO.NET

10. DataAdapter 클래스

string sql = “select * from member”;SqlConnection conn = new SqlConnection(“Server=localhost;DataBase=Pubs;uid=sa;pwd=;”);SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);adapter.DeleteCommand = new SqlCommand(“Delete from member where id = “david”, conn)

Fill 데이터 원본 테이블을 DataSet 안에 DataTable 에 입력FillSchema 데이터 원본 스키마에 맞게 DataSet 의 DataTable 을

생성Update DataSet 의 DataTable 에서 변경된 데이터를

원본테이블에 반영

메소드 설 명

DeleteCommand

DataReader 클래스 멤버 메소드

Page 30: C# Programming Version 2.0 ADO.NET

http://msdn.microsoft.com/vs2005http://msdn.microsoft.com/vs2005