ado.net
DESCRIPTION
ADO.NET. 부산 IT 직업전문학교 성 명 건. 목차. about ADO.NET 데이터베이스 연결 데이터베이스 조작 데이터 가져오기 DataTable, DataColumn, DataRow 클래스 DataView 클래스 DataSet 클래스 DataAdapter 클래스. 2. 학습목표. ADO.NET 을 쓰는 이유를 배우고 , 이전의 ADO 와의 차이점을 안다 데이터베이스 연결하는 방법을 배운다 Command 클래스에 대해서 학습한다 - PowerPoint PPT PresentationTRANSCRIPT
ADO.NET
부산 IT 직업전문학교성 명 건
22
목차
about ADO.NET 데이터베이스 연결 데이터베이스 조작 데이터 가져오기 DataTable, DataColumn, DataRow 클래스 DataView 클래스 DataSet 클래스 DataAdapter 클래스
3
학습목표
ADO.NET 을 쓰는 이유를 배우고 , 이전의 ADO와의 차이점을 안다
데이터베이스 연결하는 방법을 배운다 Command 클래스에 대해서 학습한다 Adapter 와 DataSet 클래스를 통해 비연결 지향
방법 연결에 대해서 배운다 Reader 클래스로 연결지향 방법에 대해 배운다 ADO.NET 을 통해 데이터베이스 조작 예제를
학습한다
4
about ADO.NET
4
Connection
DataAdpter
Command
DataReader
DataSet
Data ProviderData Consumers
DB
WinForm
WinForm
WebForm
WebForm
OtherOther
5
about ADO.NET
5
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
77
데이터베이스 연결
순서– Connection 객체 생성– 데이터베이스 연결 문자열 지정 (DSN)– Connection 객체의 Open 메서드로 데이터베이스 연결– Connection 객체의 Close 메서드로 데이터베이스 연결 해제
속성 설명
ConnectionString 데이터베이스 연결 문자열
ConnectionTimeout 데이터베이스 연결하는 동안의 대기 시간
Database 현재 연결해 사용할 데이터베이스 이름
DataSource 연결할 MSSQL 인스턴스 이름
ServerVersion 클라이언트가 연결될 SQLServer 인스턴스를 포함한 문자열
State 현재 연결상태 반환
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=;” ;
9
데이터베이스 연결
Connection 클래스 멤버 메서드
9
메서드 설명
ChangeDatabase 열려있는 SqlConnection 에 대해서 현재 DB 를 설정
Close DB 연결 종료
CreateCommand SqlCommand 개체 생성
Open DB 연결
Dispose SqlCommand 리소스 해제
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 확인
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);
12
데이터베이스 조작
Command 클래스 속성
12
속성 설명
CommandText 실행할 SQL 쿼리문이나 저장프로시저
CommandTimeout DB 명령 실행 대기 시간
CommandType CommandText 타입을 지정
Parameters 쿼리문이나 저장프로시저에 사용할 매개변수가 포함된 ParameterCollection 을 가져옴
Transaction 트랜잭션 처리 속성
Connection 연결되어 있는 Connection 인스턴스
13
데이터베이스 조작
Command 클래스 멤버 메서드메서드 설명
CreateParameter Prameter 생성
Prepare 데이터베이스 캐시에 쿼리문 저장
Close 데이터베이스 연결 종료
ExecuteNonQuery 데이터 명령 수행 (DB 내용 변경시 ) – 변경된 레코드 수 반환
ExecuteReader 데이터 레코드를 Reader 객체로 읽어옴 – SELECT 쿼리에 주로
ExecuteScalar 쿼리문의 첫번째 열을 반환 – 결과가 하나일때 , Object 형 반환
ReSetCommandTimeout
CommandTimeout 프로퍼티를 30 초로 재설정
Cancel 실행중인 명령을 취소
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;
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 개체의 반환된 필드를 지정하는 배열
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”; // 권장권장
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);
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]); // 권장하지 않음
}
19
데이터 가져오기
DataReader 클래스 멤버 메서드
19
메서드 설명
Read 레코드 커서를 다음 레코드로 이동
NextResult 여러 개의 레코드 셋에서 다음 레코드 셋으로 이동
GetName 레코드 셋의 필드 이름을 반환
GetOrdinal 레코드 셋의 필드 서수 값 반환
GetValue 특정필드의 값을 출력함
GetValues 현재 레코드의 모든 필드 값을 배열 형태로 반환
GetXXX 레코드셋의 레코드를 XXX( 레코드형 ) 함수를 이용해서 가져옴
Close DataReader 개체 닫기
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”));
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
22
DataTable, DataColumn, DataRow 클래스
DataRow 클래스 생성자
DataRow 클래스 속성속성 설명
HasErrors 행의 오류 여부 확인
Item 지정된 열에 저장된 데이터를 가져오거나 설정
ItemArray 배열을 통해 이 행의 모든 값을 가져오거나 설정
RowError 행에 대한 사용자 지정 오류 설명을 가져오거나 설정
RowState DataRowCollection 과의 관계와 관련 , 행의 현재 상태 가져옴
Table 스키마가 있는 DataTable 을 가져옴
DataRow row = DataTable.NewRow();
23
DataTable, DataColumn, DataRow 클래스
DataRowState 열거형속성 설명
HasErrors 행의 오류 여부 확인
Item 지정된 열에 저장된 데이터를 가져오거나 설정
ItemArray 배열을 통해 이 행의 모든 값을 가져오거나 설정
RowError 행에 대한 사용자 지정 오류 설명을 가져오거나 설정
RowState DataRowCollection 과의 관계와 관련 , 행의 현재 상태 가져옴
Table 스키마가 있는 DataTable 을 가져옴
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”);
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());
26
DataView 클래스
임시 테이블– 필요한 경우 메모리에 생성– 복잡한 쿼리문을 단순화 시켜 개발 가능– DB 에서의 View 기능을 DataView 클래스를 통해 구현– DataView 는 DataTable 로 부터 특정 필드와 레코드 정보를
가져오고 , GridView 같은 Data Binding 컨트롤에 출력
DataView 클래스 생성자public DataView DataView(DataTable tbl);
27
DataTable, DataColumn, DataRow 클래스
DataTable & DataView 예제
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);
29
DataAdapter 클래스
DB 에서 데이터 가져와 DataSet 의 DataTable 생성후 레코드 추가
ADO.NET DB 연결방법 두가지– DataReader 와 DataAdapter
쿼리문을 통해 읽어오는 data 는 주로 DataReader 사용
DB 에서 읽어오는 시간은 상대적으로 빠름
DB 와의 연결상태 유지로 인해 시스템자원낭비
비 연결지향 (DataSet) 을 사용할 때
DataAdapter/DataSet 을 사용하면 초기Data 로딩은 느린편
필요한 경우에만 DB 와 연결됨으로 인해시스템 자원 낭비 최소화
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 데이터를 갱신할 경우
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 에서 변경된 데이터를 원본 테이블에 반영
32
DataAdapter 클래스
DataAdapter, DataSet 예제
33
학습정리
ADO.NET 이 이전 방식인 ADO 보다 좋은 점은 무엇인가 ?
OleDB 에서 사용할 연결 개체는 무엇인가 ? Command 클래스에 ExecuteReader()
메서드는 어디에서 많이 쓰는가 ? Read 클래스에 데이터가 있는 지 확인하는
방법은 ? Adapter 와 DataSet 을 이용하여 윈폼 예제를
작성할 수 있는가 ?