ADO.NET 기술연구소.

Slides:



Advertisements
Similar presentations
컴퓨터와 인터넷.
Advertisements

파워포인트 2007.
DB 프로그래밍 학기.
DB 프로그래밍 학기.
ADO.NET 부산IT직업전문학교 성 명 건.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
코크파트너 설치 가이드 Window 7.
MS-Access의 개요 1강 MOS Access 2003 CORE 학습내용 액세스 응용 프로그램은 유용한 데이터를
최윤정 Java 프로그래밍 클래스 상속 최윤정
C#에서 데이터베이스 연동 방법.
연결리스트(linked list).
제 09 장 데이터베이스와 MySQL 학기 인터넷비즈니스과 강 환수 교수.
MySQL 및 Workbench 설치 데이터 베이스.
Windows Server 장. 사고를 대비한 데이터 백업.
C# Programming Version 2.0 ADO.NET.
테이블 : 데이터베이스를 구성하는 요소로 같은 성격에 정보의 집합체. 레코드 : 하나의 정보를 가지고 있는 컬럼의 집합체
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
ASP.NET : Database 접근 2008 컴퓨터공학실험(Ⅰ)
Visual Basic .NET 처음 사용하기.
3.2 SQL Server 설치 및 수행(계속) 시스템 데이터베이스 master
1. C++ 시작하기.
Sql Data Table Summon Bit 18™ 오 태 경.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
모바일 자바 프로그래밍 JDBC / WAP Ps lab 오민경.
01. DHCP의 개념 조직의 네트워크에 연결되어 있는 워크스테이션의 TCP/IP 설정을 자동화하기 위한 표준 프로토콜
17강. 데이터 베이스 - I 데이터 베이스의 개요 Oracle 설치 기본적인 SQL문 익히기
ASP.NET AJAX 비동기 게시판 작성 2007 컴퓨터공학실험( I )
10장. 예외처리.
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
C#.
10강. JSP 본격적으로 살펴보기-II 스크립트릿, 선언, 표현식 지시자 주석 Lecturer Kim Myoung-Ho
인터넷응용프로그래밍 JavaScript(Intro).
영상처리 실습 인공지능연구실.
뇌를 자극하는 Windows Server 2012 R2
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Smart Workplace 개발자 가이드
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
15장 컬렉션 프레임워크 Section 1 컬렉션 프레임워크의 개요 Section 2 리스트 Section 3 셋
USN(Ubiquitous Sensor Network)
3D 프린팅 프로그래밍 01 – 기본 명령어 강사: 김영준 목원대학교 겸임교수.
ADO.NET (SqlConnection, SqlCommand)
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
ASP.NET AJAX / AJAX Control Toolkit 응용 2008 컴퓨터공학실험( I )
데이터 베이스 DB2 관계형 데이터 모델 권준영.
PMIS 서버 설정 환경설정 작성자 : 배경환.
14강. 세션 세션이란? 세션 문법 Lecturer Kim Myoung-Ho Nickname 블스
CHAP 21. 전화, SMS, 주소록.
( Windows Service Application Debugging )
01. DHCP의 개념 조직의 네트워크에 연결되어 있는 워크스테이션의 TCP/IP 설정을 자동화하기 위한 표준 프로토콜
01. 개요 네트워크에 있는 컴퓨터와 그룹에 대한 NetBIOS 이름에 대응되는 IP 주소를 찾아주는 서비스
학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성. 학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
.Net Web Application 2007 컴퓨터공학실험(Ⅰ)
14 뷰(View) 뷰의 개념 뷰 관리.
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
Chapter 10 데이터 검색1.
세션에 대해 알아보고 HttpSession 에 대해 이해한다 세션 관리에 사용되는 요소들을 살펴본다
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
9 브라우저 객체 모델.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
프로그래밍 언어 학습을 위한 가상실습환경 창원대학교 이수현.
 6장. SQL 쿼리.
임시테이블과 테이블변수 SQLWorld Study Group - 최명환 -.
7 생성자 함수.
6 객체.
20 XMLHttpRequest.
Presentation transcript:

ADO.NET 기술연구소

데이터 액세스와 ADO.NET 데이터 액세스와 ADO.NET ADO.NET 이란 ? ADO.NET 2.0 이름 공간 구성 데이터 공급자(Data Provider) 모델 ADO.NET 객체 ADO.NET 프로그래밍 데이터 연결(Connection) 클래스 데이터 명령(Command) 클래스 데이터 리더(DataReader) 클래스 데이터 어댑트(DataAdapter) 클래스 데이터 셋(DataSet) 클래스 데이터 뷰(DataView ) 클래스 데이터 바인딩 (Windows) 제약조건, 관계 정렬, 필터링, 행 상태에서 필터링 트랜잭션과 데이터 업데이트 바인딩 지원 객체 다루기 (Windows)

데이터 액세스와 ado.net

데이터 액세스와 ADO.NET ADO.NET 이란 ? Microsoft 사에서 내놓은 최신의 Data Access 기술 데이터 액세스의 역사 윈시 기술 사용 : DBLib(SQL 서버), OCI(Oracle)과 같은 원시 라이브러리로 수행, 속도는 빠르는 작성이 어렵다. ODBC : 응용 프로그램 작성을 위한 표준 api를 제공하므로 다른 RDBMS를 변경시 연결 세부사항만 변경하면 된다. 그러나 c++과 같은 저수준의 언어로 사용되도록 설계되어 VB나 델파이 같은 고수준언어에는 부적합 하다. DAO : Data Access Object의 약자로 데이터 액세스를 위한 단순 개체 모델 제공. VB3에서 사용되었으며, ODBC를 사용할 때 속도가 느린 단점을 가지고 있다. RDO : DAO의 속도 문제를 극복하기 위해 나온 기술로 VB4 부터 사용된다. DAO와 유사한 개체 모델 제공. OLE DB : ODBC와 아키텍트 구조상 유사. 각각의 데이터소스를 지원하는 공급자를 통해 액세스. 연결 풀링, 트랜잭션 입대(Transaction enlistment: MTS에 자동 등록할 수 있는 능력)등의 기능 제공. 데이터를 사용하는 응용 프로그램은 OLE DB 소비자(consumer)를 사용한다. ADO(ActiveX Data Object) : ADO.NET의 이름을 결정한 기술(실제 아키텍쳐는 완전히 다름) 볼수 있으며, 단순히 OLE DB의 소비자 역할을 하는 것으로 VB나 델파이, 스크립트 언어와 같은 고수준 언어에서 OLE DB 데이터 원본에 액세스 하기 위한 계층의 역할을 한다. ADO.NET : .NET에서 데이터 액세스를 위한 기술, 깔끔해진 아키텍쳐, 인터넷 환경에 최적화된 개체 모델 .NET 기반의 데이터 액세스 기술 COM 컴포넌트 호출시 오버해드가 발생하므로 순수 .NET 기반의 클래스가 필요 교차 언어의 지원(VB.NET, C#, 델파이, c++ …) ODBC, OLE DB 뿐만 아니라 전용의 프로바이더 제공 XML의 지원 인터넷과 같은 단절된 연결환경에 최적화된 기능을 제공 한다. 타 시스템과 손쉬운 통합/정보의 호환성 각종 보안 네트워크 통과 다수의 변경사항을 한번에 호출가능하도록 디자인 동시성 관리 유연한 데이터 구조 손쉬운 데이터베이스와의 연동 작업

데이터 액세스와 ADO.NET ADO.NET 2.0 기본 클래스 기반 공급자 모델 공급자 팩토리 향상된 SqlClient 1.0 및 1.1에서는 인터페이스를 구현하여 개체들이 구성되어짐 2.0에서는 System.Data.Common 상에 존재하는 기본 클래스를 기반으로 하여 구현 각 기본 클래스는 이전버젼의 호환성을 위해 인터페이스를 구현 한다. 따라서 프로그래머는 기본 클래스를 사용하거나 이전버젼에서와 같이 인터페이스를 사용할 수도 있다. 공급자 팩토리 1.x 버전에서의 문제점은 인터페이스에서 생성자를 호출 할 수 없기 때문에 다른 데이터소스로의 접근을 위해 특정 클래스의 구체적인 인스턴스를 만들어야 하는데 이전 버전의 API인 OLE DB와 ADO의 경우 이 문제를 해결하기 위해 연결문자열을 오버로드 하였다. 2.0 버전에서는 이 문제를 ProviderFactory 클래스를 이용해 해결할 수 있다. 향상된 SqlClient SqlClient는 SQL 서버에 대한 특정 공급자 이다. SQL Server2005에서 새롭게 제공되는 기능을 지원하도록 되어 있다. MDAC를 사용하지 않고 데이터 액세스를 한다. 연결 풀링 향상 SqlClient 및 OracleClient 공급자의 경우 향상된 연결 풀링을 지원 한다. 향상된 풀링 기능 : 프로그래밍 방식으로 현재 유지되고 있는 모든 연결을 닫을 수 있다. 비동기 명령(SqlClient 전용) SqlClient 전용으로 제공 된다. 비동기 작업을 위해 BeginExecute로 시작하고 EndExecute로 끝나는 메서드를 제공 한다. 비동기 작업은 명령의 실행 시간이 길고, 반드시 비동기 작업이 필요한 곳에서만 사용해야 한다. 대량 가져오기(SqlBulkCopy) SqlClient에 추가된 SqlBulkCopy 클래스를 사용 한다. 클라이언트에서 많은 행을 신속하고 효율적으로 삽입하기 위해 사용 된다. SqlBulkCopy는 DataSet 또는 DataReader를 입력으로 사용할 수 있다. // 구성에서 ProviderInvariantString 가져오기 Dim provstring As String = GetProviderInvariantString() Dim fact As DbProviderFactory = DbProviderFactories.GetFactory(provstring) Dim con As IDbConnection = fact.CreateConnection() enum provider { sqlserver, oracle, oledb, odbc }; // 구성에서 공급자 확인 provider prov = GetProviderFromConfigFile(); IDbConnection conn = null; switch (prov) { case provider.sqlserver: conn = new SqlConnection(); break; case provider.oracle: conn = new OracleConnection(); case provider.oledb: conn = new OleDbConnection(); case provider. odbc: conn = new OdbcConnection(); // 응용 프로그램에서 지원하므로 새 공급자를 추가 }  연결 풀링 모니터링 응용 프로그램에서 사용되는 연결 풀링을 모니터링할 경우 SQL Server에 제공되는 프로파일러 도구를 사용하거나 Microsoft Windows 2000 운영 체제에 제공되는 성능 모니터 도구를 사용할 수 있다. * SQL Server 프로파일러를 사용하여 연결 풀링을 모니터링하려면 1. 시작을 클릭하고 프로그램, Microsoft SQL Server를 차례로 가리킨 후 프로파일러를 클릭하여 프로파일러를 시작한다. 2. 파일 메뉴에서 새로 만들기를 가리킨 다음 추적을 클릭한다. 3. 연결 세부 정보를 제공한 다음 확인을 클릭한다. 4. 적 속성 대화 상자에서 이벤트 탭을 클릭한다. 5. 선택한 이벤트 클래스 목록에서 Audit Login 및 Audit Logout 이벤트가 Security Audit 아래에 표시되어 있는지 확인한다. 추적을 명확하게 만들려면 목록에서 다른 모든 이벤트를 제거한다. 6. 실행을 클릭하여 추적을 시작한다. 연결이 설정되면 Audit Login 이벤트가 표시되고 연결이 닫히면 Audit Logout 이벤트가 표시된다. * 성능 모니터를 사용하여 연결 풀링을 모니터링하려면 1. 시작을 클릭하고 프로그램, 관리 도구를 차례로 가리킨 후 성능을 클릭하여 성능 모니터를 시작한다. 2. 배경 그래프를 마우스 오른쪽 단추로 클릭한 후 카운터 추가를 클릭한다. 3. 성능 개체 드롭다운 목록에서 SQL Server: General Statistics를 클릭한다. 4. 표시된 목록에서 User Connections를 클릭한다. 5. 추가를 클릭한 다음 닫기를 클릭한다. // DataSet 채우기 Dim ds As DataSet = new DataSet() FillDataSetFromHardwareDevice(ds) // 데이터를 SqlServer에 복사 Dim connect_string As String = GetConnectStringFromConfigFile() Dim bcp As SqlBulkCopy = new SqlBulkCopy(connect_string) bcp.DestinationTableName = "hardware_readings” bcp.WriteToServer(ds)

데이터 액세스와 ADO.NET System.Data System.Data.Common System.Data.SqlClient 이름 공간 구성 데이터 액세스와 ADO.NET System.Data DataSet, DataTable, DataView와 같은 공급자 독립 유형의 클래스를 포함 한다. System.Data.Common 데이터 공급자(Data Provider)를 위한 기본 클래스를 포함 한다. System.Data.SqlClient Sql Server (7.0 ~ 2005)를 위한 .NET Data Provider 유형을 포함하고 있다. System.Data.OracleClient Oracle 서버(8.1.7 이후의 버전)를 위한 .NET Data Provider 유형을 포함하고 있다. System.Data.OleDb OleDb .NET Data Provider 유형을 포함하고 있다. 표준 인터페이스 이므로 DB별로 일부 지원되지 않는 기능이 있을 수 있다. System.data.Odbc Odbc .NET Data Provider 유형을 포함하고 있다. 일반 프로그래밍 데이터 원본간에 코드를 이동할 필요가 있는 경우 System.Data.Common 내의 기본 클래스인 DbConnection, DbCommand, DbDataAdpater, DbDataReader에 대한 프로그래밍을 고려해야 한다.

데이터 공급자(Data Provider) 모델(ADO.NET Architecture)

데이터 액세스 시나리오 데이터 액세스와 ADO.NET

Ado.net 객체

Ado.net 객체 데이터 연결 (Connection) 클래스 개요 : 데이터 베이스와의 연결을 목적으로 사용되는 클래스이다. 구성 인터페이스 : System.Data 네임스페이스의 IDbConnection을 구현하여 만들어 진다. 기본클래스 : 공급자별로 System.Data.Common 네임스페이스의 DbConnection 클래스를 상속받아 만들어 진다. DbConnection에서 상속하는 경우, Open, Close, BeginDbTransaction, ChangeDatabase, CreateDbCommand 및 OpenStateChange 멤버를 반드시 재정의해야 한다. 또한 ConnectionString, Database, DataSource, ServerVersion 및 State 속성도 제공해야 한다. 파생 클래스 System.Data.SqlClient : SqlConnection System.Data.OracleClient : OracleConnection System.Data.OleDb : OleDbConnection System.Data.Odbc : OdbcConnection System.Data.SqlServerCe : SqlCeConnection 주요기능 데이터 연결 Open : ConnectionString에서 지정하는 설정을 사용하여 데이터베이스에 연결을 연다. 연결 닫기 Close : 데이터 베이스에 대한 연결을 닫는다. 열려 있는 연결을 닫는 기본 메서드이다. 연결 정보 ConnectionString : 데이터베에스와 연결을 위한 정보를 지정하거나 가져오기 위해서 사용 된다. 연결 상태 정보 State : 연결의 상태를 설명 한다.

Ado.net 객체 데이터 명령(Command) 클래스 개요 : SQL 문 또는 저장 프로시저를 실행 하고 결과 값을 리턴 시켜 준다. 구성 인터페이스 : System.Data 네임스페이스의 IDbCommand 를 구현 한다. 기본클래스 : 공급자별로 System.Data.Common 네임스페이스의 DbCommand 클래스를 상속받아 만들어 진다. 파생 클래스 System.Data.SqlClient : SqlCommand System.Data.OracleClient : OracleCommand System.Data.OleDb : OleDbCommand System.Data.Odbc : OdbcCommand System.Data.SqlServerCe : SqlCeCommand 주요기능 SQL 문 또는 저장 프로시저 CommandText : 데이터 소스에 대해 실행할 텍스트 명령을 가져오거나 설정 한다. CommandType : 텍스트 명령이 해석되는 방법을 지정 한다. 일반적으로 Text와 StoredProcedure가 사용 된다. 연결 객체 Connection : Command에서 사용하는 DbConnection을 가져오거나 설정 한다. 매개변수 Parameters : DbParameter 개체의 컬렉션을 가져 온다. 실행 ExecuteNonQuery : 연결 개체에 대한 쿼리를 실행 한다. 결과 값을 리턴 받을 필요가 없는 경우 사용 한다. ExecuteScalar : 쿼리를 실행하고 쿼리에서 반환된 결과 집합의 첫 번째 행의 첫 번째 열을 반환 한다. 다른 모든 행과 열은 무시 된다. ExecuteReader : 쿼리를 실행하고 DbDataReader 개체를 반환 한다. 쿼리 타입 저장 프로시저 : 컴파일된 명령문을 실행 한다. 실행 속도는 가장 빠르다. Ad hoc Query : 동적 쿼리, 쿼리 패턴이 같더라도 서버는 모두 다른 쿼리로 인식하기 때문에 성능에 좋지 않다. Parameter Query : 쿼리의 재 사용율(Plan 재사용)이 높아서 서능향상에 유리하다. SqlServer의 경우 매개변수 타입에 주의해야 한다.

Ado.net 객체 데이터 리더(DataReader) 클래스 개요 : 데이터 소스에서 앞으로만 이동가능한 행 스트림을 읽어서 제공 한다. 구성 인터페이스 : IDataReader , IDataRecord, Ienumerable 인터페이스를 구현 한다. 기본클래스 : 공급자별로 System.Data.Common 네임스페이스의 DbDataReader를 상속 받아 만들어 진다. 파생 클래스 System.Data.SqlClient : SqlDataReader System.Data : DataTableReader System.Data.OracleClient : OracleDataReader System.Data.OleDb : OleDbDataReader System.Data.Odbc : OdbcDataReader System.Data.SqlServerCe : SqlCeDataReader 주요기능 행 이동 Read : 이 메서드가 호출되면 결과 집합의 다음 레코드로 이동 한다. 데이터 읽기 GetXXXX : Get으로 시작하는 타입으로 끝나는 메서드는 지정된 열의 값을 가져 온다. 지정된 열의 데이터 형식에 맞는 메서드를 사용 하거나 GetValue를 사용해 Object 타입으로 값을 가져올 수 있다. 닫기 Close : DataReader 개체를 닫는다. 개체를 닫기 전까지는 이 연결에서 다른 명령을 수행 할 수 없다. 기타 FieldCount : 현재 행의열의 수를 리턴 한다. GetName : 지정된 서수에 해당하는 열의 이름을 가져 온다. GetSchemaTable : DataReader의 열 메타데이터를 설명하는 DataTable을 반환 한다. RecordsAffected : 하나 이상의 행이 있는지 여부를 나타내는 값을 가져 온다.

Ado.net 객체 데이터 어댑터(DataAdapter) 클래스 개요 : 데이터 셋을 채우고 데이터 소스를 업데이트하는 데 사용되는 SQL 명령 집합 및 데이터베이스 연결을 나타낸다. 응용 프로그램은 DbDataAdpater 인스턴스를 직접 생성하지 않고 상속하는 클래스의 인스턴스를 생성하여 사용한다. 구성 인터페이스 DataAdatper 클래스는 System.Data.IDataAdapter 인터페이스를 구현 한다. DbDataAdapter 클래스는 DataAdapter 클래스를 상속받고 IDbDataAdapter 인터페이스를 구현 한다. 기본 클래스 System.Data.Common 네임스페이스의 DataAdapter 클래스로부터 DbDataAdapter가 파생된다. System.Data.Common 네임스페이스의 DbDataAdapter 클래스로부터 각 공급자의 클래스가 파생 된다. IDbDataAdapter의 구현을 지원하고 완전한 DataAdater 구현에 필요한 기능을 대부분 상속 한다. 파생 클래스 System.Data.SqlClient : SqlDataAdapter System.Data.OracleClient : OracleDataAdapter System.Data.OleDb : OleDbDataAdapter System.Data.Odbc : OdbcDataAdapter System.Data.SqlServerCe : SqlCeDataAdapter 주요기능 조회 Fill : SelectCommand 객체를 이용해 DataSet을 채운다. 저장 Update : UpdateCommand, DeleteCommand, InsertCommand 객체를 이용해 DataSet내의 변경된 데이터를 데이터 소스에 업데이트 한다. 기타 AcceptChangesDurringFill, AccptChangesDurringUpdate : Fill, Update시점에 AcceptChanges 자동 호출할지 여부 FillLoadOption : 데이터를 채우는 방법을 결정하는 LoadOption MissingMappingAction : 들어오는 데이터가 일치하는 테이블이나 열이 없는 경우 수행하는 동작 MissingSchemaAction : 기존 DataSet(또는 DataTable)의 스키마가 들어오는 데이터와 일치하지 않는 경우 동작 UpdateBatchSize : 일괄 처리의 크기를 지정 한다.

Ado.net 객체 데이터 어댑터(DataAdapter) 클래스 배치 업데이트 설정 UpdateRowSource 속성 1.x 버전이 경우 Update 메서드에서 한번에 한행씩 업데이트를 수행함으로 인해 행단위로 데이터베에스 서버와 라운드 트립이 발생 한다. 2.0 버전에서는 UpdateBatchSize 속성을 통해 지정된 크기의 배치 작업이 가능, 0(기본값)의 값을 설정할 경우 서버가 처리할 수 있는 최대 배치 크기로, 1을 지정하면 배치 사용안함, > 1 의 값을 지정하는 경우 지정된 크기로 배치 작업이 수행 된다. SqlClient, OracleClient에서만 사용 가능 하다. 너무 큰 배치 사이즈는 오히려 성능 저하를 가져올 수 있으므로 최적의 배치 크기를 테스트 후 사용해야 한다. 배치 업데이트를 수행하는 경우 UpdateRowSource 속성은 FirstReturnRecord 또는 Both 를 사용할 수 없다. UpdateRowSource 속성 DataAdpater에 Update 메서드 실행시 명령 결과가 DataRow에 적용되는 방법을 지정한다. 속성 값 Both : 출력 매개 변수와 처음 반환된 행은 모두 변경된 행에 매핑 한다. FirstReturnRecord : 처음 반환된 행을 변경된 행에 매핑 한다. None : 반환된 행과 매개변수를 무시 한다. OutputParameters : 출력 매개변수 변경된 행에매핑) 중 하나의 값을 사용 한다. 명령이 자동생성될 경우 기본값은 None 이고, 자동생성되지 않은 경우는 Both이다. 배치 관련 이벤트 처리 DataAdpater는 Update관련 이벤트인 RowUpdating, RowUpdated를 제공 한다. 업데이트가 발생하기 전 RowUpdating, 업데이트가 실행되고나서 RowUpdated 이벤트가 발생 한다. 배치가 비활성화된 경우 행을 처리할때 마다 이러한 이벤트가 각각 발생 한다. 배치가 활성화된 경우 한번의 데이터베이스 동작으로 여러 개의 행이 업데이트 된다. 이경우 RowUpdated 이벤트는 한번의 배치 작업에 한번만 발생 하지만 RowUpdating 이벤트는 매 행마다 발생 한다. 따라서 RowUpdating 이벤트를 통해 업데이트전 row의 데이터에 접근 할 수 있다.

Ado.net 객체 DataAdpater와 CommandBuilder CommandBuilder를 이용한 Command 객체의 생성 SelectCommand 객체의 ComamndText 속성의 쿼리를 기준으로 UpdateCommand, DeleteCommand, InsertCommand 객체를 자동으로 생성 한다. 동시성 문제 DataAdpater 객체를 이용해 Update 메서드를 호출해서 실행하는 경우 데이터베이스에 영향을 주는 행이 없는 경우 .NET Framework은 강제로 예외를 발생 시킨다. 이 때 발생하는 예외가 동시성 예외 이다. 최종 데이터의 조회 후 변경된 데이터를 업데이트 하기전에 다른 사용자에 의해 데이터의 변경이 일어난 경우 동시성 문제가 발생 한다.  DBConcurrencyException 타입의 예외 발생 변경사항에 대한 감시 방법 설정(ConflictOption) 변경된 행의 모든 칼럼을 검사하는 방법  동시성 문제를 체크할 수 있다.(기본 동작 방식) 변경된 행의 기본키(PK)만 비교하는 방법  동시성 문제를 체크하지 않는다. 변경된 행의 버전(Timestemp 칼럼 사용)을 비교하는 방법  동시성 문제를 체크할 수 있다. 특정 DB만 사용가능 업데이트 칼럼의 결정 변경된 row의 모든 칼럼을 업데이트 한다. 변경된 row의 변경된 칼럼만 업데이트 한다. (기본 동작 방식)

Ado.net 객체 DataColumn DataRow DataTable Constraints DataRelation 데이터 셋(DataSet) 클래스 Ado.net 객체 개요 데이터의 저장소 역할을 한다. 데이터베이스와 유사한 기능을 가지고 있다.  In Memory Database 라고도 한다. DataTable의 컬렉션을 가진다. DataTable 간의 관계를 지정하는 DataRelation 컬렉션을 가진다. DataTable은 DataColumn의 컬렉션을 가진다. DataTable은 DataRow의 컬렉션을 가진다. DataTable의 데이터는 마치 배열과 같이 접근할 수 있다. 1행 1열의 데이터  dt.Rows(0)(0) DataRow DataColumn DataTable DataRelation Constraints

Ado.net 객체 데이터 셋(DataSet) 클래스 데이터의 변경 유무 확인 변경된 데이터 정보 얻기 HasChanges 속성 : DataSet에 포함된 DataTable들의 어떠한 행의 어떠한 칼럼중 하나라도 변경이 되면 이 값은 True 값을 가지게 된다. 변경된 데이터 정보 얻기 GetChanges : 변경된 데이터의 복사본을 획득할 수 있다. DataTable도 동일한 메서드로 복사본을 획득할 수 있다. Merge를 통해 복사본과 원본을 다시 합칠 수 있다. 2.0부터는 DataTable도 Merge 메서드를 제공 한다. Row의 버전 : DataRowVersion DataRowVersion을 이용해 원하는 데이터로 접근할 수 있다. ds.Tables(“Orders”).Rows(0)(0)  CurrentVersion의 데이터 값을 가져 온다. ds.Tables(“Orders”).Rows(0)(0, DataRowVersion.Original)  원본 버전의 값을 가져 온다. Row State : row의 상태를 가져 온다. 임시(Propose), 신규(Added), 편집(Modified), 삭제(Deleted), 변경없음(None) 등의 상태를 가진다. AcceptChanges 현재 편집 작업을 완료 한다. 데이터베이스의 Commit과 같은 역할을 한다. DataSet, DataTable, DataRow에서 사용 한다. RejectChanges 현재 편집 작업을 취소 한다. 데이터베이스의 Rollback과 같은 역할 을 한다. 복사 및 복제 Clone : 데이터를 제외한 DataSet과 DataTable의 구조를 복제 한다. Copy : 데이터와 스키마를 복사 한다. 객체의 경우 대입 연산자를 이용하면 참조 주소만 복사된다. 따라서 동일한 데이터와 스키마를 가지는 DataSet의 완전한 복사본을 만들어서 사용하고자 하는 경우 Copy 메서드를 이용해야 한다. 원본에서 구조와 데이터를 모두 복사한 다음 새로운 DataSet( 또는 DataTable)을 얻을 수 있다.

Ado.net 객체 데이터셋(DataSet) 클래스 데이터의 병합 Merge : DataSet, DataTable에서 제공 된다. 두 객체의 데이터를 병합 한다. 아주 비슷한 스키마를 가지는 두 개의 DataTable의 개체를 병합하는데 사용된다. 병합 작업에는 원래 테이블과 병합 테이블만 사용된다. 자식 테이블은 영향을 받거나 포함되지 않는다. DataTable의 경우 2.0에서 새롭게 지원 하고 있다. 데이터의 병합 방식 PreserveChanges : 원래 테이블의 변경 내역을 유지 할 것인지 여부를 결정하는 속성 이다. 들어오는 값이 기존 행의 현재 버전을 덮어쓸지 여부를 결정 한다. True : 기존 행의 Current 행 버전의 데이터는 보존 되지만 들어오는 행의 Original 행 버전 데이터가 기존 행의 Original 행 데이터를 덮어 쓴다. 그리고 기존 행의 RowState는 Modified가 된다. True에 대한 예외 기존 행이 Deleted인 경우 RowState는 Deleted로 유지되고 들어오는 행의 Original 행 버전이 기존 행의 Original 행 버전을 데이터를 덮어 쓴다. 들어오는 행의 RowState가 Added인 경우 Original 행 버전이 없으므로 기존 행의 오리지날 데이터를 덮어쓰지 않는다. False : 들어오는 행의 데이터가 기존행의 Current 및 Original 행 모두를 덮어 쓴다. RowState는 들어오는 행의 RowState로 맞춰진다. False에 대한 예외 들어오는 행이 Unchanged이고 기존 행이 Modified, Deleted, Added 인 경우 기존행은 Modified로 설정된다. 들어오는 행이 Added이고 기존 행이 Unchanged, Modified, Deleted인 경우 기존행은 Modified로 설정된다. 또한 들어오는 행이 Original을 가지고 있지 않기 때문에 기존행의 Original 버전은 그대로 유지된다. 스키마의 병합 방식 MissingSchemaAction : 병합할 때 스키마가 다를 경우 어떻게 처리할지를 지정 한다. Add : 들어오는 새 스키마를 추가하고 데이터를 채운다. AddWithKey : 새 스키마 및 기본키 정보를 추가하고 데이터를 채운다. Error : 일치하지 않는 스키마 정보가 발견되면 예외를 발생 시킨다. Ignore : 들어오는 새 스키마 정보를 무시 한다. PK 유무에 따라 다른 결과를 보인다. PK가 없는 경우 : 기존 행의 아래 쪽에 추가 된다. Union All 처럼 동작한다. PK가 있는 경우 : 기존 행의 PK가 일치하는 데이터를 찾아서 병합 한다. Join처럼 동작 한다.

Ado.net 객체 데이터셋(DataSet) 클래스 기본키 Relation DataTable 데이터 베이스의 PK와 유시한 역할을 한다. DataTable은 하나 이상의 기본키를 가질 수 있다. 기본키로 설정된 칼럼은 Not Null에 유니크 속성을 가진다. Relation DataSet내의 DataTable들 간의 관계를 설정한다. 데이터베이스의 참조키와 유사한 역할을 한다. PK가 있으면 좀더 명확 하지만 PK가 없어도 관계를 지정할 수 있다. 바인딩 가능한 컨트롤의 DataSource 로 사용할 수 있다. ParentRow와 ChildRow의 검색이 가능 하다. DataTable 실질적으로 데이터를 가지고 있는 객체이다. 데이터 취급을 위해 다양한 메서드를 제공 한다. Compute : 조건을 적용한 단일 칼럼에 대한 계산식을 실행할 수 있다. Select : 조건과 DataRowViewState로 필터링된 row이 배열을 정렬시킨 결과를 리턴 한다. Copy : 데이터 및 스키마를 복제 한다. Clone : 데이터를 제외한 스키마만 복제 한다. 계산열의 추가 Dt.Add(“총금액(단가*수량)”, GetType(Double), “UnitPrice*Quantity”) 계산식 (Expression) 집계 함수 사용 가능 : “Sum(Price)”, “Count(ID)” Relation을 이용한 참조 가능 : “Sum(Child.Quantity)”  자식행의 수량 합계 Merge : 데이터를 병합 한다. Load : 2.0에서 새롭게 제공되는 기능으로 IDataReader를 사용해 DataTable을 채운다. ImportRow : 원래 값과 현재 값에 대한 속성을 그대로 유지한 상태로 DataRow를 DataTable에 복사 된다. LoadDataRow : 특정 행을 찾아서 업데이트 한다. 일치하는 행을 찾지 못하면 새 행을 만들어 추가 한다.

Ado.net 객체 데이터 뷰(DataView) 클래스 개요 : DataTable의 뷰, 데이터베이스의 View와 유사하다고 보면 된다. DataRowView의 컬렉션을 가진다. 정렬, 필터링, 검색, 편집 및 탐색을 위해 데이터 바인딩할 수 있는 DataTable의 사용자 지정 뷰를 나타낸다. Window Form 뿐만 아니라 Web Form에서도 데이터를 바인딩 할 수 있다. DataTable은 DefaultView라는 속성을 이용해 기본 DataView를 얻을 수 있다. DataTable의 하위 집합을 나타낼 수 있다. 서로 다른 두 컨트롤에 동일한 DataTable을 바인딩하여 서로 다른 버전의 데이터를 보여 줄 수 있다. 컨트롤에 DataTable을 직접 바인딩하는 경우 DefaultView가 사용된다. 데이터 필터링 RowFilter 속성을 사용 한다. 행에 표시할 필터링 식을 설정 한다. 쿼리의 Where절 다음에 들어가는 표현식과 유사하다. RowStateFilter : 행 상태에 대한 필터링을 지정 한다. 이 속성을 이용해 삭제된 행만 보거나 편집된 행만 볼 수 있다. 데이터의 정렬 Sort 속성을 사용 한다. 쿼리의 Order by 절 다음에 들어가는 표현식과 유사하다. 데이터의 편집 DataRowView의 데이터를 수정하면 DataTable의 데이터도 수정 된다. AddNew : 행 집합에 새 행을 추가 한다. Delete : 행 집합에서 행을 삭제 한다. AllowDelete, AllowNew, AllowEdit 속성을 이용해 삭제, 추가, 편집을 허용하거나 막을 수 있다. 데이터검색 Find : 지정된 정렬 키 값에 따라서 DataView에서 행의 인덱스 번호를 찾는다. Sort 속성을 통해 정렬을 하고 Find 속성에서 검색할 값을 입력한다. 지정된 정렬키 값이 있으면 해당 행의 인덱스 값을, 없으면 -1이 리턴 된다. FindRows : 열 값이 지정된 정렬 키 값과 일치하는 DataRowView 개체의 배열을 반환 한다. 일치하는 값을 찾지 못하면 빈 배열을 반환 한다. Count : RowFilter 및 RowStateFilter 속성이 적용된 다음 DataView의 레코드 수를 가져 온다.

Ado.net 프로그래밍

Ado.net 프로그래밍 데이터 바인딩 데이터 바인딩의 이해 바인딩의 종류 단순 바인딩 컨트롤의 속성과 1:1로 바인딩 되는 것 바인딩되는 값의 타입에 제한이 없다. 복합 바인딩 컨트를의 특정 인터페이스를 사용하여 다수의 Row와 Column을 바인딩 하는 것 DataSource : Ilist 구현한 모든 클래스는 DataSource로 사용 가능 하다. Array ArrayList CollectionBase DataSet DataTable DataView BindingManagerBase 동일한 데이터 소스 및 데이터 멤버에 바인딩되는 Binding 개체를 모두 관리 한다. 이 클래스는 추상 클래스로 이 클래스에서 상속되는 CurrencyManager 를 이용해 동기화 및 현재 항목에 대한 포인터를 관리 한다. BindingContext에서 특정 데이터소스에 대한 BindingManagerBase를 찾을 수 있다. CurrencyManager BindingManagerBase를 상속받아 구현 클래스 입니다. 바인딩된 개체를 관리 한다. 현재 항목이 변경되면 CurrencyManager는 바인딩된 컨트롤에 모두 알려 데이터를 새로 고칠수 있도록 한다. Position 속성을 사용하여 컨트롤이 가리키는 행을 지정할 수 있다. 데이터 소스의 행의 수를 확인 하려면 Count 속성을 사용 한다. 현재 위치의 데이터 항목을 가져오려면 Current 속성을 사용 한다. EndCurrentEdit, CancelCurrentEdit : 컨트롤의 편집중인 데이터를 편집을 완료하여 데이터소스와 동기화하거나 편집을 취소 한다. UpdateIsBinding : 바인딩된 컨트롤과 해당 데이터 소스 간의 데이터 바인딩을 업데이트 한다.

Ado.net 프로그래밍 바인딩 지원 객체(BindingSource) 다루기 개요 : 폼의 데이터 소스를 캡슐화 한다. 2.0 버전부터 새로 추가된 클래스. BindingSource 구성 요소를 데이터 소스에 연결한 다음 폼의 컨트롤을 BindingSource의 구성 요소에 바인딩 함으로써 수행된다. 탐색, 필터링, 정렬, 업데이트를 비롯한 데이터와의 추가 상호 작용은 모두 BindingSource의 구성 요소를 통해 이루어 진다. DataSource와 DataMember 속성을 이용해 단순 바인딩 및 복합 바인딩을 모두 지원 한다. 용도 간접 참조의 계층, 변경 알림 및 기타 서비스를 제공하여 폼의 컨트롤에 바인딩하는 작업을 간단하게 한다. 강력한 형식(Typed DataSet과 같은)의 데이터 소스 역할을 수행 한다. 기능 Current : CurrencyManager와 마찬가지로 현재 항목을 가져 온다. CurrencyManager : 현재 바인딩된 데이터소스의 CurrencyManager를 가져 온다. 현재 항목에 대한 편집 작업 : RemoveCurrent, EndEdit, CancelEdit, Add, AddNew 메서드를 통해 작업을 수행 한다. Add : BindingSource의 구성요소에 항목을 추가 한다. 추가되는 항목이 기존의 항목과 다른 경우 예외가 발생 한다. AddNew : 기본 목록에 새 항목 추가. 다음과 같은 일력의 작업 설정 EndEdit를 호출해 보류중인 편집 작업을 모두 커밋 한다. AddingNew 이벤트를 발생 시킨다. AddingNew 이벤트가 처리되지 않고 기본 목록이 IBindingList이면 IBindingList.AddNew 메서드로 요청 전달, 기본 목록이 IBindingList가 아니면 목록의 항목은 기본생성자를 통해 자동으로 만들어 진다. 데이터 소스에서 IEditableObject 인터페이스를 구현하지 않으면 새 항목이 기본 목록에 즉시 추가된다. 이 경우 새 항목은 System.ComponentModel.ICancelAddNew.EndNew를 명시적으로 호출하거나 새 목록 작업이 시작될 때까지 커밋되지 않는다. 새 항목이 커밋되기 전에 CancelEdit를 호출하여 새 항목을 롤백할 수 있다. 이렇게 하면 새 항목이 삭제 된다. RemoveCurrent : 목록에서 현재 항목을 삭제 한다. Position : 현재 항목의 인덱스 번호를 리턴 한다. Insert :목록 내의 지정된 인덱스에 항목을 삽입 한다.