안규 공부방

ACTIVE SERVER PAGE > Connection - Method

등록일 : 2017-07-04 17:02 조회수 : 93,605


 안녕하세요...
Connection 개체의 속성 대해서 간단히 알아보셨쪄????
오늘은 이 개체의 메소드는 어떤것들이 있는지를 알아보도록 하겠습니다.
 
  5.4.1 BeginTrans, CommitTrans, RollbackTrans 메소드
 
  위 세개의 메소드를 사용한 예제 입니다.
 
Set objCnn = Server.CreateObject("ADODB.Connection")
	objCnn.Open ("Provider=SQLOLEDB;User ID=sa;Password=;Initial Catalog=test;Data Source=MOBBIE-ANKYU")	
	objCnn.BeginTrans
	
	strSql=" INSERT INTO BOARD(NUMBER,TITLE,CONTENT) VALUES(1,'연습','내용입니다.')"
	Set objRs = objCnn.Execute(strSql)

	If objCnn.Errors.Count > 0 Then    
        	objCnn.RollBackTrans 
        	objCnn.close
        	Set objCnn=Nothing
        	response.write  "Error Transection"
	Else
        	objCnn.CommitTrans 
        	objCnn.close
        	Set objCnn=Nothing
        	response.write "OK Transection"
	End If

	objCnn.close
	Set objCnn=Nothing



트랜젝션에 대한 개념은 알고 계시리라 믿습니다. 혹시 모르신다면, MS_SQL 강좌쪽에

Transaction & Lock  메뉴를 먼저 보신후에 오세용.

여기에서는 트랜잭션에 대한 내용이 아니라 Connection 개체에 메소드에 대한 내용이기 때문이져.

위의 소스를 보면, objCnn.BeginTrans 라고 했습니다. 즉, 트랜잭션을 시작한다는 내용인데요.

이후에 나오는 디비 핸들링하는것에 대해서는 commitTrans,rollbackTrans를 만나야

데이터수정이 종료되는것을 뜻합니다.

아시져???

위의 예제에서는 error 컬렉션을 이용해서 rollbacktrans,commitTrans을 처리하게 되어 있습니다.
 

	Set objCnn = Server.CreateObject("ADODB.Connection")
	objCnn.Open ("Provider=SQLOLEDB;User ID=sa;Password=;Initial Catalog=test;Data Source=MOBBIE-ANKYU")

	objCnn.BeginTrans

	strSql=" INSERT INTO BOARD(board_idx,TITLE,CONTENT) VALUES(1,'연습','내용입니다.')"
	Set objRs = objCnn.Execute(strSql)

	objCnn.RollbackTrans

	objCnn.close
	Set objCnn=Nothing



위의 예제는 데이터를 저장한후 바루 rollbackTrans 을 처리한 예입니다.

디비에서 확인해 보면, 저장이 되지 않았겠지요???

  5.4.2 Close 메소드
 
  이 메서드는 열려진 Connection 개체와 그 하위 개체를 닫는 메소드 입니다.
 
  5.4.3 Execute 메소드
 
  가장 많이 사용하는 메소드 중에 하나이지요???
 

	Set objCnn = Server.CreateObject("ADODB.Connection")
	objCnn.Open ("Provider=SQLOLEDB;User ID=sa;Password=;Initial Catalog=test;Data Source=MOBBIE-ANKYU")

	strSql=" INSERT INTO BOARD(board_idx,TITLE,CONTENT) VALUES(1,'연습','내용입니다.')"

	Set objRs = objCnn.Execute(strSql)

	objCnn.close
	Set objCnn=Nothing


 
  위와 함께 사용 사용하셨지요???
 
  여기까지는 다 아시는 내용이니, 넘어가기루 하구요. 우린 여기에서 한단계 깊이 들어가 보도록 하겠습니다.
  만약 여러분이 여기에서 SQL 문장을 통해 영향을 받은 레코드의 수를 알아보고자 한다면
  어떻게 하시겠습니까???
 
  웬 갑자기 레코드 수냐구요???
 
  Execute 메소드에서 이러한 정보도 뽑아볼수 있습니다. 그리구, 여러가지 매개변수를 통해 수행되는
 
  commandText(여기에서는 strSql)가 SQL 문장인지,테이블명인지, 저장 프로시져인지를 지정할수도 있습니다.
 
  그럼, 일단 Execute 메소드의 구문을 알아보도록 하겠습니다.
 
 
    
	1) Recordset이 반환될경우
	   Set objCnn = Server.CreateObject("ADODB.Connection")
	   :
	   SET objRs=objCnn.Execute(CommandText As String,[RecordsAffected As Long],[Options As Enum])
	2) Recordset 개체가 반환되지 않을 경우
	   Set objCnn = Server.CreateObject("ADODB.Connection")
	   :
	   Connection.Execute CommandText As String,[RecordsAffected As Long],[Options As Enum]
	
      

위와 같은 구문을 사용합니다.

1. CommandText : 수행할 명령을 기술하는 매개변수입니다.SQL 문장,테이블명,저장 프로시져등을 기술합니다.
2. RecordsAffected : Execute 메소드에 의해서 영향을 받은 레코드의 갯수를 반환합니다.
3. Options : Provider가 CommandText를 어떻게 수행할지를 결정하는 방법을 지정하는 값입니다.

Options 매개변수에는 아래 표중의 하나의 값을 가질수 있습니다.
 
속 성 설 명
adCmdText
adCmdTable
adCmdTableDirect
adCmdStoredProc
adCmdUnknown
adAsyncExecute
adAsyncFetch
CommandText의 값을 SQL 문장으로 처리한다.
CommandText의 값을 테이블 명으로 하는 sql 문장을 만들어 처리한다.
CommandText의 값을 테이블명으로 처리한다.
CommandText의 값을 저장 프로시져로 처리한다.
명령의 형식을 알수 없음으로 처리한다.
명령을 비동기적으로 수행한다.
CasheSize 속성에 지정된 수 만큼의 레코드씩 비동기적으로 처리한다.
  


그럼, 간단하게 몇가지 예제를 보면서 테스트 해보도록 하겠습니다.
 

	Set objCnn = Server.CreateObject("ADODB.Connection")
	objCnn.Open ("Provider=SQLOLEDB;User ID=sa;Password=;Initial Catalog=test;Data Source=MOBBIE-ANKYU")

	strSql=" INSERT INTO BOARD(board_idx,TITLE,CONTENT) VALUES(1,'연습','내용입니다.')"

	Set objRs = objCnn.Execute(strSql,aa)

	response.write aa
	objCnn.close
	Set objCnn=Nothing



위의 예제를 보면

Set objRs = objCnn.Execute(strSql,aa)

aa 매개변수는 sql문장을 수행한후 영향을 받은 레코드의 수를 반환하는 변수가 됩니다.

위의 예제에서는 레코드가 하나 영향 받았기 때문에 '1'이란 값이 출력이 됩니다.

아래의 예제는 Options 매개변수까지 사용한 예 입니다.
 

	Set objCnn = Server.CreateObject("ADODB.Connection")
	objCnn.Open ("Provider=SQLOLEDB;User ID=sa;Password=;Initial Catalog=test;Data Source=MOBBIE-ANKYU")

	Set objRs = objCnn.Execute("test 1",aa,adCmdStoredProc)

	response.write aa&"<br>"
	response.write objRs("title")
	objCnn.close
	Set objCnn=Nothing



저장 프로시져 내용....
 

	CREATE PROCEDURE test (@class varchar(50)) AS
		select board_idx,title from board where board_idx=@class
	



test란 이름으로 저장프로시져를 하나 만들었습니다.

위의 경우 adCmdStoredProc 는 저장프로시져를 뜻하게 되므로 저장프로시져에서 읽어와 실행하게 됩니다.
영향을 받은 레코드는 없기때문에 aa 변수는 -1이 반환되구 title에는 결과가 나오는것을 알수 있습니다.

  5.4.4. OpenSchema 메소드
 
  OpenSchema 메서드는 서버에 있는 데이터베이스의 정보 또는 테이블의 필드의 정보와 같은 데이터 소스의
  정보를 반환하는 메서드 입니다.
 
  OpenSchema 구문을 살펴보도록 하겠습니다.
 

  	set Rs=objCnn.OpenSchema(QueryType,Criteria,SchemaID)
  	
  	
	
	'---- SchemaEnum Values ----
	Const adSchemaProviderSpecific = -1
	Const adSchemaAsserts = 0
	Const adSchemaCatalogs = 1
	Const adSchemaCharacterSets = 2
	Const adSchemaCollations = 3
	Const adSchemaColumns = 4
	Const adSchemaCheckConstraints = 5
	Const adSchemaConstraintColumnUsage = 6
	Const adSchemaConstraintTableUsage = 7
	Const adSchemaKeyColumnUsage = 8
	Const adSchemaReferentialConstraints = 9
	Const adSchemaTableConstraints = 10
	Const adSchemaColumnsDomainUsage = 11
	Const adSchemaIndexes = 12
	Const adSchemaColumnPrivileges = 13
	Const adSchemaTablePrivileges = 14
	Const adSchemaUsagePrivileges = 15
	Const adSchemaProcedures = 16
	Const adSchemaSchemata = 17
	Const adSchemaSQLLanguages = 18
	Const adSchemaStatistics = 19
	Const adSchemaTables = 20
	Const adSchemaTranslations = 21
	Const adSchemaProviderTypes = 22
	Const adSchemaViews = 23
	Const adSchemaViewColumnUsage = 24
	Const adSchemaViewTableUsage = 25
	Const adSchemaProcedureParameters = 26
	Const adSchemaForeignKeys = 27
	Const adSchemaPrimaryKeys = 28
	Const adSchemaProcedureColumns = 29
	Const adSchemaDBInfoKeywords = 30
	Const adSchemaDBInfoLiterals = 31
	Const adSchemaCubes = 32
	Const adSchemaDimensions = 33
	Const adSchemaHierarchies = 34
	Const adSchemaLevels = 35
	Const adSchemaMeasures = 36
	Const adSchemaProperties = 37
	Const adSchemaMembers = 38
	Const adSchemaTrustees = 39
	
	Set objCnn = Server.CreateObject("ADODB.Connection")
	objCnn.Open ("Provider=SQLOLEDB;User ID=sa;Password=;Initial Catalog=test;Data Source=MOBBIE-ANKYU")
	
	Set objRs = objCnn.OpenSchema(adSchemaTables)

	do until objRs.eof
    		response.write objRs("TABLE_CATALOG")&":"&objRs("TABLE_SCHEMA")&":"
    					&objRs("TABLE_NAME")&":"&objRs("TABLE_TYPE")&"<BR>"
	objRs.movenext    
	loop



위의 예제는 OpenSchema 메소드의 QueryType이 adSchemaTables 인 값(Criteria)들을 뽑아 온것입니다.

adSchemaTables QueryType을 이용해서 뽑아올수 있는 값들은 4가지가 있습니다.

TABLE_CATALOG -> 데이타베이스 이름
TABLE_SCHEMA  -> 테이블 스키마 이름
TABLE_NAME    -> 테이블 이름
TABLE_TYPE    -> 테이블 타입


QueryType 의 종류의 위 소스에서 선언한것과 같이 39가지나 되는군요.
각기 다른 QueryType 별로 뽑아올수 있는 Criteria 값도 모두 틀립니다.
(공부할게 너무 많군요)
 

	Const adSchemaTables = 20
	Set objCnn = Server.CreateObject("ADODB.Connection")
	objCnn.Open ("Provider=SQLOLEDB;User ID=sa;Password=;Initial Catalog=test;Data Source=MOBBIE-ANKYU")

	Set objRs = objCnn.OpenSchema(adSchemaTables)

	do until objRs.eof
    		if objRs("table_type")="TABLE" THEN
    			response.write objRs("TABLE_NAME")&"<BR>"
    		end if
	objRs.movenext    
	loop

	objCnn.close



만약 사용자가 만든 테이블 이름만을 가지고 오고 싶다면 위처럼 사용해도 됩니다.

그러나, 아래처럼 Criteria 값을 넣어서 가지고 오면 더 편하겠지요?
 

	Const adSchemaTables = 20

	Set objCnn = Server.CreateObject("ADODB.Connection")
	objCnn.Open ("Provider=SQLOLEDB;User ID=sa;Password=;Initial Catalog=test;Data Source=MOBBIE-ANKYU")

	Set objRs = objCnn.OpenSchema(adSchemaTables,table_name)

	do until objRs.eof
       		response.write objRs("TABLE_NAME")&"<BR>"
	objRs.movenext    
	loop

	objCnn.close



어떠세여. 좀더 간단해 졌지요????

할게 아직도 너무 많지만, OpenSchema 메소드는 여기에서 접어야 할것 같네요....
 
※ 혹시 도움이 되셨다면 댓글에 한마디 남겨주세요!
작성자   비밀번호
자동글 방지     (자동글 방지 기능입니다.)
내용   댓글달기 
이메일 문의 : cak0280@nate.com  
Copyright 2000 By ENTERSOFT.KR All Rights Reserved.