ado.net

33
ADO.NET 부부 IT 부부부부부부 부 부 부

Upload: ciara-wong

Post on 31-Dec-2015

38 views

Category:

Documents


0 download

DESCRIPTION

ADO.NET. 부산 IT 직업전문학교 성 명 건. 목차. about ADO.NET 데이터베이스 연결 데이터베이스 조작 데이터 가져오기 DataTable, DataColumn, DataRow 클래스 DataView 클래스 DataSet 클래스 DataAdapter 클래스. 2. 학습목표. ADO.NET 을 쓰는 이유를 배우고 , 이전의 ADO 와의 차이점을 안다 데이터베이스 연결하는 방법을 배운다 Command 클래스에 대해서 학습한다 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: ADO.NET

ADO.NET

부산 IT 직업전문학교성 명 건

Page 2: ADO.NET

22

목차

about ADO.NET 데이터베이스 연결 데이터베이스 조작 데이터 가져오기 DataTable, DataColumn, DataRow 클래스 DataView 클래스 DataSet 클래스 DataAdapter 클래스

Page 3: ADO.NET

3

학습목표

ADO.NET 을 쓰는 이유를 배우고 , 이전의 ADO와의 차이점을 안다

데이터베이스 연결하는 방법을 배운다 Command 클래스에 대해서 학습한다 Adapter 와 DataSet 클래스를 통해 비연결 지향

방법 연결에 대해서 배운다 Reader 클래스로 연결지향 방법에 대해 배운다 ADO.NET 을 통해 데이터베이스 조작 예제를

학습한다

Page 4: ADO.NET

4

about ADO.NET

4

Connection

DataAdpter

Command

DataReader

DataSet

Data ProviderData Consumers

DB

WinForm

WinForm

WebForm

WebForm

OtherOther

Page 5: ADO.NET

5

about ADO.NET

5

Page 6: ADO.NET

6

관련 네임스페이스

ADO.NET

Data Provider– OleDB Vs. MSSQL

6

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

System.Data ADO.NET 필수 클래스

System.Data.Common

데이터공유 클래스 (Data Provider 간에 공유되는 타입 )

System.Data.OleDb OleDb 제공 클래스

System.Data.SqlClient

MSSQL 서버 제공 클래스

System.Data.SqlTypes

MSSQL 서버 기본 데이터 형식 클래스

역할 OleDB SQL

데이터베이스 연결 OleDbConnection SqlConnection

SQL 명령 실행 OleDbCommand SqlCommand

데이터 읽어오기 OleDbDataReader SqlDataReader

데이터 전송 OleDbDataAdapter SqlDataAdapter

Page 7: ADO.NET

77

데이터베이스 연결

순서– Connection 객체 생성– 데이터베이스 연결 문자열 지정 (DSN)– Connection 객체의 Open 메서드로 데이터베이스 연결– Connection 객체의 Close 메서드로 데이터베이스 연결 해제

속성 설명

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

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

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

DataSource 연결할 MSSQL 인스턴스 이름

ServerVersion 클라이언트가 연결될 SQLServer 인스턴스를 포함한 문자열

State 현재 연결상태 반환

Page 8: ADO.NET

8

데이터베이스 연결

ConnectionString

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

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

conn.ConnectionString = “Addr=127.0.0.1;database=Northwind;UID=sa;PWD=;” ;

conn.ConnectionString = “Data Source=127.0.0.1;database=Northwind;UID=sa;PWD=;” ;

Page 9: ADO.NET

9

데이터베이스 연결

Connection 클래스 멤버 메서드

9

메서드 설명

ChangeDatabase 열려있는 SqlConnection 에 대해서 현재 DB 를 설정

Close DB 연결 종료

CreateCommand SqlCommand 개체 생성

Open DB 연결

Dispose SqlCommand 리소스 해제

Page 10: ADO.NET

10

데이터베이스 연결

MS-SQL 연결using System.Data;using System.Data.SqlClient; // OleDb

class ConsoleConnection {static void Main(string[] args) {

SqlConnection conn = new SqlConnection(); // OleDbConnectionconn.ConnectionString = "Server=localhost;database=ADO;uid=sa;pwd=;" ;//conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\ado.mdb“;try {

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

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

} finally {if(conn != null) {

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

}}

}}

명명된 파이프와 TCP/IP 확인

Page 11: ADO.NET

11

데이터베이스 조작

순서– 데이터베이스 연결 : 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: ADO.NET

12

데이터베이스 조작

Command 클래스 속성

12

속성 설명

CommandText 실행할 SQL 쿼리문이나 저장프로시저

CommandTimeout DB 명령 실행 대기 시간

CommandType CommandText 타입을 지정

Parameters 쿼리문이나 저장프로시저에 사용할 매개변수가 포함된 ParameterCollection 을 가져옴

Transaction 트랜잭션 처리 속성

Connection 연결되어 있는 Connection 인스턴스

Page 13: ADO.NET

13

데이터베이스 조작

Command 클래스 멤버 메서드메서드 설명

CreateParameter Prameter 생성

Prepare 데이터베이스 캐시에 쿼리문 저장

Close 데이터베이스 연결 종료

ExecuteNonQuery 데이터 명령 수행 (DB 내용 변경시 ) – 변경된 레코드 수 반환

ExecuteReader 데이터 레코드를 Reader 객체로 읽어옴 – SELECT 쿼리에 주로

ExecuteScalar 쿼리문의 첫번째 열을 반환 – 결과가 하나일때 , Object 형 반환

ReSetCommandTimeout

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

Cancel 실행중인 명령을 취소

Page 14: ADO.NET

14

데이터베이스 조작

CommandText

SqlCommand cmd = new SqlCommand();

cmd.CommandText = “SELECT * FROM Employees WHERE LastName = ‘King’”;//cmd.CommandText = “SELECT * FROM Employees WHERE LastName = ‘@LastName’”;cmd.CommandType = CommandType.Text;cmd.Connection = conn;

Page 15: ADO.NET

15

데이터 가져오기

DataReader 클래스 생성자

DataReader 클래스 속성

SqlConnection conn = new SqlConnection();

SqlCommand cmd = new SqlCommand(“SELECT * FROM Employees”, conn);

SqlDataReader read = cmd.ExecuteReader();

속성 설명

FieldCount 현재 레코드의 필드수를 반환

IsClosed DataReader 개체가 닫혀있는지 반환

RecordsAffected 데이터를 조작할 경우 DB 에 바뀐 레코드수 반환

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

Page 16: ADO.NET

16

데이터베이스 조작

CreateParameterSqlCommand cmd = new SqlCommand();

…1)SqlParameter param = cmd.CreateParameter(); // 파라미터 생성param.ParameterName = “@LastName”; // 파라미터 이름 지정param.SqlDbType = SqlDbType.NVarchar; // 파라미터 타입형param.Size = 20; // 타입형의 사이즈 Varchar(10)param.Value = “King”; // 들어가는 값

2)cmd.Parameters.Add(“@LastName”, SqlDbTypeNVarchar, 20).Value = “King”; // 권장권장

Page 17: ADO.NET

17

데이터 가져오기

FieldCount

RecordsAffected

SqlCommand cmd = new SqlCommand(“SELECT * FROM Employees”, conn);SqlDataReader read = cmd.ExecuteReader();Console.WriteLine(“Employees 의 전체 컬럼 개수 : {0}”, read.FieldCount);

SqlCommand cmd = new SqlCommand(“Update Employees SET Country = ‘USA’ WHERE EmployeeID = 9”, conn);

SqlDataReader read = cmd.ExecuteReader();Console.WriteLine(“Employees 의 변경된 레코드 개수 : {0}”, read.RecordsAffected);

Page 18: ADO.NET

18

데이터 가져오기

ItemSqlCommand cmd = new SqlCommand(“SELECT * FROM Employees”, conn);SqlDataReader read = cmd.ExecuteReader();while (read.Read()){

Console.WriteLine(read[“EmployeeID”] + “\t” +read[“LastName”] + “ “ +read[“FirstName”]); // 권장

Console.WriteLine(read[0] + “\t” + read[1] + “ “ +reate[2]); // 권장하지 않음

}

Page 19: ADO.NET

19

데이터 가져오기

DataReader 클래스 멤버 메서드

19

메서드 설명

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

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

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

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

GetValue 특정필드의 값을 출력함

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

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

Close DataReader 개체 닫기

Page 20: ADO.NET

20

DataTable, DataColumn, DataRow 클래스

클래스

DataColumn

System.Data 타입 설명

DataTable 데이터 테이블

DataColumn 데이터 테이블에서 특정 Column 을 나타낼 때 사용

DataRow 데이터 테이블에서 특정 Row 를 나타낼 때 사용

// User 컬럼을 만들고 Type 을 System.String 형으로 지정할 경우DataColumn col = new DataColumn(“User”, Type.GetType(“System.String”));

Page 21: ADO.NET

21

DataTable, DataColumn, DataRow 클래스

DataColumn// User 컬럼을 만들고 Type 을 System.String 형으로 지정할 경우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: ADO.NET

22

DataTable, DataColumn, DataRow 클래스

DataRow 클래스 생성자

DataRow 클래스 속성속성 설명

HasErrors 행의 오류 여부 확인

Item 지정된 열에 저장된 데이터를 가져오거나 설정

ItemArray 배열을 통해 이 행의 모든 값을 가져오거나 설정

RowError 행에 대한 사용자 지정 오류 설명을 가져오거나 설정

RowState DataRowCollection 과의 관계와 관련 , 행의 현재 상태 가져옴

Table 스키마가 있는 DataTable 을 가져옴

DataRow row = DataTable.NewRow();

Page 23: ADO.NET

23

DataTable, DataColumn, DataRow 클래스

DataRowState 열거형속성 설명

HasErrors 행의 오류 여부 확인

Item 지정된 열에 저장된 데이터를 가져오거나 설정

ItemArray 배열을 통해 이 행의 모든 값을 가져오거나 설정

RowError 행에 대한 사용자 지정 오류 설명을 가져오거나 설정

RowState DataRowCollection 과의 관계와 관련 , 행의 현재 상태 가져옴

Table 스키마가 있는 DataTable 을 가져옴

Page 24: ADO.NET

24

DataTable, DataColumn, DataRow 클래스

DataTable 클래스– 메모리 내에 존재하는 테이블– 테이블 정보를 DataAdapter 나 DataSet 클래스를 참고해 작성

DataTable 클래스 생성자

DataTable 클래스 속성 / 메서드– http://msdn.microsoft.com/ko-kr/library/system.data.datat

able_properties(VS.80).aspx

DataTable table = new DataTable(“Member”);

Page 25: ADO.NET

25

DataTable, DataColumn, DataRow 클래스

DataTable dt = new DataTable();dt.Columns.AddRange(new DataColumn[] { new DataColumn("Key"),

new DataColumn("Index"), new DataColumn("Value")});

dt.Rows.Add(1, 10, " 홍길동 ");dt.Rows.Add(2, 20, " 박길동 ");dt.Rows.Add(3, 30, " 김길동 ");

dt.PrimaryKey = new DataColumn[] { dt.Columns["Index"] };

//1. 일반검색DataRow[] rows = dt.Select("Key=" + 2);Console.WriteLine(rows[0]["Value"].ToString());

//2. 키로검색DataRow row = dt.Rows.Find(30);Console.WriteLine(row["Value"].ToString());

//3. Index 로검색DataRow row2 = dt.Rows[0];Console.WriteLine(row2["Value"].ToString());

Page 26: ADO.NET

26

DataView 클래스

임시 테이블– 필요한 경우 메모리에 생성– 복잡한 쿼리문을 단순화 시켜 개발 가능– DB 에서의 View 기능을 DataView 클래스를 통해 구현– DataView 는 DataTable 로 부터 특정 필드와 레코드 정보를

가져오고 , GridView 같은 Data Binding 컨트롤에 출력

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

Page 27: ADO.NET

27

DataTable, DataColumn, DataRow 클래스

DataTable & DataView 예제

Page 28: ADO.NET

28

DataSet 클래스

비연결 지향– DataSet = 메모리 DataBase– DataSet 을 통해 실제 DB 의 종류에 상관없이 DataAdapter

객체를 통해 메모리상의 해당자료 ( 테이블 , 컬럼 , 레코드정보 )를 저장 가능

– DB 에 하나 이상의 Table 이 있듯이 , DataSet 은 하나 이상의 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);

Page 29: ADO.NET

29

DataAdapter 클래스

DB 에서 데이터 가져와 DataSet 의 DataTable 생성후 레코드 추가

ADO.NET DB 연결방법 두가지– DataReader 와 DataAdapter

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

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

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

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

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

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

Page 30: ADO.NET

30

DataAdapter 클래스

DataAdapter 클래스 생성자public SqlDataAdapter();public SqlDataAdapter(SqlCommand selectCommand);public SqlDataAdapter(string selectCommandText, SqlConnection selectConnection);public SqlDataAdapter(string selectCommandText, string selectConnectionString);

속성 설명

DeleteCommand 데이터를 삭제할 경우

InsertCommand 데이터를 입력할 경우

SelectCommand 데이터를 검색할 경우

UpdateCommand 데이터를 갱신할 경우

Page 31: ADO.NET

31

DataAdapter 클래스

DeleteCommand 속성

DataAdapter 클래스 멤버 메서드

string sql = “SELECT * FROM Emplyoees”;SqlConnection conn = new SqlConnection(“Server=localhost;DataBase=Northwind;uid=sa;pwd=;”);SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);adapter.DeleteCommand = new SqlCommand(“DELETE FROM Employees

WHERE EmployeeID = 10”, conn);

메서드 설명

Fill 데이터원본 테이블을 DataSet 안에 DataTable 에 입력

FillSchema 데이터 원본 스키마에 맞게 DataSet 의 DataTable 을 생성

Update DataSet 의 DataTable 에서 변경된 데이터를 원본 테이블에 반영

Page 32: ADO.NET

32

DataAdapter 클래스

DataAdapter, DataSet 예제

Page 33: ADO.NET

33

학습정리

ADO.NET 이 이전 방식인 ADO 보다 좋은 점은 무엇인가 ?

OleDB 에서 사용할 연결 개체는 무엇인가 ? Command 클래스에 ExecuteReader()

메서드는 어디에서 많이 쓰는가 ? Read 클래스에 데이터가 있는 지 확인하는

방법은 ? Adapter 와 DataSet 을 이용하여 윈폼 예제를

작성할 수 있는가 ?