Transcript 자료(0)

서버 연결(Connection)
 연결형 방식의 주요 클래스
 Connection, Reader, Adapter 클래스
 연결 객체
 연결은 뒤에 ~Connection 이라는 이름이 붙은 클래스로 관리
 SQL 서버의 경우 SqlConnection 클래스가 연결을 담당
 SqlConnection 클래스의 생성자
public
public
SqlConnection( )
SqlConnection( string connectionString)
 연결 문자열을 지정하는 방법
 통상적으로 생성자에서 연결 문자열을 지정
 디폴트 생성자로 일단 생성한 후 프로퍼티로 연결 문자열을
따로 지정할 수도 있음.
 연결과 관련된 정보와 여러 가지 옵션들이 프로퍼티로 제공됨.
프로퍼티
ConnectionString
타입
String
설명
연결 문자열이다
ConnectionTimeout Int
연결될 때까지의 대기 시간이며 디폴
트는 15초이다. 이 시간 동안 연결되지
않으면 에러가 리턴된다.
Database
String
연결된 데이터베이스 이름이다.
DataSource
String
연결된 SQL Server의 인스턴스 이름이
다.
PacketSize
Int
SQL 서버와 통신할때 사용할 패킷의
크기이다. 디폴트는 8192바이트이다.
ServerVersion
String
SQL서버의 버전 정보를 조사한다.
State
ConnectionState
연결의 현재 상태이다. Open, Closed
등이 있다.
 제한 시간, 연결할 서버명 등에 대한 정보는 모두 연결 문자열을
통해 초기화되며 실행 중에 변경하려면 별도의 메서드를 호출해야 함.
 메서드 목록
메서드
설명
Open
연결 문자열을 참조하여 데이터베이스에 연결
한다. 실패 시 예외가 발생한다.
Close
연결을 해제한다. 실행 중인 트랜잭션이 있으면
모두 롤백된다.
BeginTransaction 새로운 트랜잭션을 시작하고 Transaction 객체
를 리턴한다. 인수로 트랜잭션의 이름을 지정하
거나 격리 수준을 설정할 수 있다.
CreateCommand 연결 객체와 관련된 명령 객체를 생성한다.
ChangeDatabase 현재 데이터베이스를 변경한다.
 런타임이 해제를 자동으로 수행하지 않으므로 연결 해제는 직접 해야
하며 절대로 생략해서는 안됨.
연결 문자열
 DB서버에는 서버가 요구하는 인증을 통과해야 하는데 일반적
으로 ID와 비밀번호를 인증 수단으로 사용함.
 연결 문자열
 연결에 필요한 정보를 가장 일반적인 포맷인 문자열 형태로
정의한 것.
 연결 문자열은 “키=값” 형태의 대입문을 세미콜론으로 구분
하여 여러 개 모아 놓은 것이며 접속에 필요한 여러 가지 정보를
제공
 키의 종류는 공급자마다 다르며 접속하고자 하는 서버가 요구하는
키를 문법에 맞게 잘 작성해야 함.
키
디폴트
설명
DataSource
또는 Server
연결할 SQL서버의 인스턴스 이름을 지
정한다. 로컬 인스턴스를 지정할 때는
(local)이라고 적는다. 서버명 앞에 프로
토콜 접두어를 붙일 수 있고 서버명 뒤
에는 포트 번호를 지정할 수 있다.
Initial Catalog
또는 Database
최초 접속할 데이터베이스의 이름이다.
Integrated Security
또는
Trusted_Connection
False
윈도우의 인증 모드를 사용한다. 이 값
이 false이면 사용자 ID와 암호를 지정해
야 한다. True, yes, sspi등은 혼합 모드
를 쓰며 false, no는 쓰지않는다.
User ID
로그인 계정이다
Password, Pwd
로그인 계정에 대한 ID이다.
Packet Size
Connect Timeout
8192
PacketSize 프로퍼티와 동일한 의미이다.
ConnectionTimeout 프로퍼티와 동일한
의미이다.
 연결 문자열의 각 키에 적당히 값을 대입하고 Open 메서드를 호
출하면 연결됨.
(예) 로컬 서버의 ADOTest DB 에 연결하는 간략한 예
Con = new SqlConnection();
Con.ConnectionString = "Server=(local);database=ADOTest;" +
"Integrated Security=true";
try
{
Con.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
……..
Con.Close() ;
 연결뿐만 아니라 명령 실행 중에도 예외는 언제든지 발생할 수 있
으며 예외가 발생할 만한 코드는 항상 try 블록으로 감싸는 것이
원칙
 Open 호출이 성공했으면 서버와 연결된 것이므로 이후 이 연결을
통해 서버에게 명령을 보낼 수 있음.
 연결은 가비지 컬렉션 대상이 아니므로 사용이 끝난 후에는 반드시
Close 나 Dispose 를 호출하여 명시적으로 닫아야 함.
 SQL 서버의 연결 문자열은 최소한 서버명, DB명, 인증 모드 세가지
의 정보가 필요함.
 윗 코드에서는 윈도우즈 통합 인증 모드를 사용하여 현재 로그인
한 사용자의 ID 로 인증을 받았는데 로컬 서버에서는 이 방법이
가장 간편함.
 SQL 서버의 인증 모드가 윈도우즈 인증 모드가 아니라면 사용자
의 계정과 ID를 지정하여 접속해야 함.
Con.ConnectionString = "Server=(local);database=ADOTest; User ID=sa;Pwd=“;
 암호를 연결 문자열에 넣어 버리면 시스템 상황에 따라 실행 여부가
결정되는 문제가 있고 중요한 암호가 노출될 수 있으므로 바람직하
지 않으며 권장되지도 않음.
 가급적이면 윈도우의 통합 보안을 사용하는 것이 안전함.
SQL 문 실행
 서버에 연결했으면 다음은 서버에게 명령을 보내거나 프로시저를
호출하여 데이터를 달라고 요청해야 함.
 실행 명령은 SqlCommand 클래스로 표현함.
public SqlCommand(string cmdText, SqlConnection conection)
public SqlCommand( )
 SqlCommand 클래스로 실행하는 방법
윗 예문과 같이 생성자로 SQL 명령 문자열과 연결 객체에
대한 참조를 전달하는 것이 가장 일반적
 명령문과 명령을 실행할 서버를 생성 시점에 미리 밝히
는것
 하나의 명령만 실행할 때는 이 방법이 간편함.
기본 생성자나 연결 객체의 다음 메서드로 빈 명령 객체를
생성
public SqlCommand CreateCommand( )
 빈 객체를 생성한 후 프로퍼티를 통해 연결이나 실행할 명령을
대입하면 됨.
 명령 객체 하나로 여러 개의 명령을 번갈아 가며 실행할 때는 이
방법이 더 편리함.
 명령 객체의 프로퍼티(property)
 생성자로 전달하는 연결 객체와 명령문이 프로퍼티로도 정의
되며 그 외 시간 설정이나 명령의 유형, 파라미터 등의 정보
들도 지정할 수 있음.
프로퍼티
타입
설명
Connection
SqlConnection
연결 객체에 대한 참조이다.
CommandText
String
실행할 SQL명령 문자열이다.
CommandTime
out
Int
명령 실행 타임아웃 값이며 디폴트는 30
초이다.
CommandType
CommandType
명령의 유형이다. Text이면 SQL명령이고
StoredProcedure이면 저장 프로시저이고
TableDirect이면 테이블의 이름이되 OLE
DB공급자에서만 가능하다.Text가 디폴트
이다.
Parameters
SqlParameterCollec SQL이나 저장 프로시저로 전달되는 인수
tion
의 목록이다.
Transaction
SqlTransaction
명령이 실행되는 트랜잭션 개체이다
 명령 객체가 준비되었으면 실행 메서드를 호출함.
 실행할 명령의 종류에 따라 호출하는 메서드들이 따로 준비되어
있는데 각 메서드는 리턴값의 형태가 다름.
메서드
설명
ExecuteReader
SQL명령을 실행하고 SqlDataReader 결과셋을
리턴한다. 주로 SELECT명령에 대해 사용한다.
ExecuteScalar
SQL명령을 실행하고 첫번째 행의 첫번째 열을
리턴한다. 집계 함수에 대해 사용한다.
ExecuteNonQuery
SELECT이외의 쿼리를 실행하고 영향받은 행의
개수를 리턴한다. INSERT, UPDATE, DELE
ExecuteXmlReader
SQL명령을 실행하고 XmlReader 결과셋을 리턴
한다.
 Reader객체는 SELECT문의 결과셋을 가지는 읽기 전용, 전진
전용의 객체
 Reader 객체는 오로지 결과셋을 읽기만 할 뿐이며 삽입, 삭제,
수정 등의 동작은 할 수 없음.
 명령 실행의 결과로만 생성되므로 별도의 생성자는 정의되어
있지 않으며 따로 생성할 필요도 없음.
 결과셋의 정보들은 Reader 객체의 다음 프로퍼티를 통해 조사
프로퍼티
타입
설명
FieldCount
Int
열 개수를 조사한다.
HasRows
Bool
결과셋에 행이 있는지 조사한다.
RecordsAffected
Int
SQL실행 결과 영향을 받은 행의 개
수를 조사한다. SELECT문은 -1이 리
턴된다. 리더를 완전히 닫아야만 이
프로퍼티를 참조할 수 있다.
Connection
SqlConnection 관련된 연결 객체이다.
 Reader로부터 결과셋을 읽을 때는 별도로 제공되는 메서드를 쓸 수
도 있지만 통상은 인덱서를 사용함.
 읽고자 하는 열의 이름이나 순서 값을 인덱서의 인수로 전달함.
 주요 메서드
public override bool Read( )
public override bool NextResult( )
 Read메서드는 결과셋의 레코드를 순서대로 읽음.
 리더 객체가 생성된 후에는 결과셋의 첫 레코드 이전을 가리
키고 있으므로 Read 메서드를 먼저 호출해야 첫번째 레코드를
읽을 수 있음.
 NextResult 메서드는 여러 개의 결과셋을 한꺼번에 읽을 때 다음
결과 셋으로 이동함.
 다 읽은 후에는 Close메서드로 결과셋을 반드시 닫아야 함.
파라미터 사용
프로퍼티
타입
설명
ParameterName
String
파라미터의 이름이다. 첫 글자가 반드시 @이어야 한다.
DbType 또는 SqlDbType
DbType
파라미터의 타입이다. 디폴트는 NVarChar이다.
SqlDbType 열거형에 SQL 서버가 지원하는
대부분의 타입들이 포함되어 있다.
Size
Int
파라미터의 최대 크기를 바이트 단위로 지정하며
유니코드 문자열에서는 문자의 개수이다. 주로
문자열 타입에 대해 사용되며 고정 길이 타입에
대해서는 무시된다. 생략 시 실제 값으로부터 유추된다.
Scale
Byte
Decimal 타입에 대해 소수 자릿수를 지정한다.
Direction
ParameterDirection
파라미터의 방향을 나타낸다. Input, Output,
InputOutput, ReturnValue 네 가지가 있으며
디폴트는 Input이다.
IsNullable
Bool
Null 허용 여부를 조사한다.
Value
Object
파라미터의 값이다. 파라미터가 있는 명령은
실행 전에 Value에 값을 대입해야 한다. 출력용
인수도 Value를 통해 값을 확인한다.
SourceColumn
String
소스의 열 이름이다.
SourceVersion
DataRowVersion
UPDATE를 수행하는 동안 필드의 언제 값을 읽을
것인가를 지정한다. Original은 원래 들어있던 값이고
Current는 현재 값이다. 디폴트는 Current이다.