150 likes | 297 Views
서버 연결 (Connection). 연결형 방식의 주요 클래스 Connection, Reader, Adapter 클래스 연결 객체 연결은 뒤에 ~Connection 이라는 이름이 붙은 클래스로 관리 SQL 서버의 경우 SqlConnection 클래스가 연결을 담당 SqlConnection 클래스의 생성자 연결 문자열을 지정하는 방법 통상적으로 생성자에서 연결 문자열을 지정 디폴트 생성자로 일단 생성한 후 프로퍼티로 연결 문자열을 따로 지정할 수도 있음.
E N D
서버 연결(Connection) • 연결형 방식의 주요 클래스 • Connection, Reader, Adapter 클래스 • 연결 객체 • 연결은 뒤에 ~Connection 이라는 이름이 붙은 클래스로 관리 • SQL 서버의 경우 SqlConnection클래스가 연결을 담당 • SqlConnection클래스의 생성자 • 연결 문자열을 지정하는 방법 • 통상적으로 생성자에서 연결 문자열을 지정 • 디폴트 생성자로 일단 생성한 후 프로퍼티로 연결 문자열을 따로 지정할 수도 있음. public SqlConnection( ) public SqlConnection( string connectionString)
연결과 관련된 정보와 여러 가지 옵션들이 프로퍼티로 제공됨.
제한 시간, 연결할 서버명 등에 대한 정보는 모두 연결 문자열을 통해 초기화되며 실행 중에 변경하려면 별도의 메서드를 호출해야 함. • 메서드목록 • 런타임이 해제를 자동으로 수행하지 않으므로 연결 해제는 직접 해야하며 절대로 생략해서는 안됨.
연결 문자열 • DB서버에는 서버가 요구하는 인증을 통과해야 하는데 일반적으로 ID와 비밀번호를 인증 수단으로 사용함. • 연결 문자열 • 연결에 필요한 정보를 가장 일반적인 포맷인 문자열 형태로정의한 것. • 연결 문자열은 “키=값” 형태의 대입문을 세미콜론으로 구분하여 여러 개 모아 놓은 것이며 접속에 필요한 여러 가지 정보를제공 • 키의 종류는 공급자마다 다르며 접속하고자 하는 서버가 요구하는키를 문법에 맞게 잘 작성해야 함.
연결 문자열의 각 키에 적당히 값을 대입하고 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, SqlConnectionconection) public SqlCommand( ) • SqlCommand클래스로 실행하는 방법 • 윗 예문과 같이 생성자로SQL 명령 문자열과 연결 객체에 대한 참조를 전달하는것이 가장 일반적 • 명령문과 명령을 실행할 서버를 생성 시점에 미리 밝히는 것 • 하나의 명령만 실행할 때는 이 방법이 간편함. • 기본 생성자나 연결 객체의 다음 메서드로 빈 명령 객체를생성 public SqlCommandCreateCommand( )
빈객체를 생성한 후 프로퍼티를 통해 연결이나 실행할 명령을대입하면 됨. • 명령 객체 하나로 여러 개의 명령을 번갈아 가며 실행할 때는 이방법이 더 편리함. • 명령 객체의 프로퍼티(property) • 생성자로 전달하는 연결 객체와 명령문이 프로퍼티로도 정의되며 그 외 시간 설정이나 명령의 유형, 파라미터 등의 정보들도 지정할 수 있음.
명령 객체가 준비되었으면 실행 메서드를 호출함. • 실행할 명령의 종류에 따라 호출하는 메서드들이 따로 준비되어있는데 각 메서드는 리턴값의 형태가 다름.
Reader객체는 SELECT문의 결과셋을 가지는 읽기 전용, 전진 전용의 객체 • Reader 객체는 오로지 결과셋을 읽기만 할 뿐이며 삽입, 삭제,수정 등의 동작은 할 수 없음. • 명령 실행의 결과로만 생성되므로 별도의 생성자는 정의되어있지않으며 따로 생성할 필요도 없음. • 결과셋의 정보들은 Reader 객체의 다음 프로퍼티를 통해 조사
Reader로부터 결과셋을 읽을 때는 별도로 제공되는 메서드를 쓸 수도 있지만 통상은 인덱서를 사용함. • 읽고자 하는 열의 이름이나 순서 값을 인덱서의 인수로 전달함. • 주요 메서드 • Read메서드는결과셋의 레코드를 순서대로 읽음. • 리더 객체가 생성된 후에는 결과셋의 첫 레코드 이전을 가리키고 있으므로 Read 메서드를 먼저 호출해야 첫번째 레코드를읽을 수 있음. • NextResult메서드는 여러 개의 결과셋을 한꺼번에 읽을 때 다음 결과 셋으로 이동함. • 다 읽은 후에는 Close메서드로결과셋을 반드시 닫아야 함. public override bool Read( ) public override boolNextResult( )