ASP Connection 개체의 메소드

ASP Connection 개체의 메소드


@ . Connection 개체의 메소드
메소드 사용법

  • BeginTrans 트랜젝션을 시작하게 하는 메소드
  • Cancle 비동기적인 작업들을 취소시킨다
  • Close 열려있는 연결을 닫는다
  • CommitTrans 드랜젝션 변경 내용을 저장한다. 그리고 트랜젝션을 끝낸다
  • Execute 쿼리나 스토어드 프로시저를 실행하게 한다.
  • Open 데이터 스토어와의 연결을 한다
  • OpenSchema Provider로부터 데이터베이스 스키마를 얻어온다
  • RollbackTrans 트랜젝션 변경 내용을 취소한다 그리고 트랜잭션을 끝낸다

1 . Cancel 메소드

  • Excute나 Open메소드로 시작된 비동기적인 작업을 취소한다

2 . Close 메소드

  • 열려진 연결을 닫는데에 사용하는 메소드이다 . 하지만 단지 연결만이 닫힐뿐 ,
  • 개체 자체는 소명되는 것이 아니기에 다시 Open메소드로 연결을 시도할수 있다
  • 개체를 완전히 소멸하기 위해서는 개체변수에 Nothing을 지정해야 한다.

3 . Execute 메소드

  • Connection개체를 통해 어떠한 명령을 수행할 경우에 사용되는 메소드이다 .
  • 데이터를 돌려주지 않는 명령(Insert, Update, Delete)을 하거나, 명령을 통해서 레코드셋을
  • 생성하기 위해 사용되며 스토어드 프로시져도 수행할수 있다
    ex ) 구문 Connection.Execute CommandText, [RecurdAffected], [Options]
    . CommandText : 실행할 명령. 이것은 쿼리일수도, 테이블 이름일수도, 스토어드 프로시저 등일수도 있다.
    . RecordAffected : CommandText를 통해서 적용된 레코드들의 개수가 저장되는 변수
    . Options : 이값은 지정하지 않아도 상관은 없지만 사용할경우 효율적이다.
    이 값은 CommandText값이 어떤 타입인지를 지정하는 것으로 지정하지 않을 경우
    자동으로 알아서 지정되기는 하지만 서버측에서는 그에 따른 처리 시간을 조금더
    요구하게 되므로 가급적 지정하는 것이 좋다 이에 사용할수 있는 겂은 한개 이상의
    CommandTypeEnum 값이나 혹은 ExecuteOptionEnum값이 될수 있다 .

ex )

1
2
3
4
5
6
7
8
9
10
11
12
13
<%
Option Explicit
Dim Con
Dim strConnect, sql, LngRecs
strConnect = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=pubs;Data Source=TAEYO;Password="
set Con = Server.CreateObject("ADODB.Connection")
Con.Open strConnect
sql = "Update titles Set price = price * 1.2"
Con.Execute sql, LngRecs, adCmdTest ' 레코드의 값과 쿼리문의 옵션을 설정
Response.Write "총 "&LngRecs&" 권의 책의 가격이 인상되었습니다."
Con.Close
Set Con = nothing
%>

. Otions의 설정값
CommandTypeEnum

  • CommandTypeEnum은 지정된 CommandText의 타입을 Options 인자로써 명시적으로 지정할
  • 경우 사용할수 있는 상수들로 다음과 같은 값들을 가지고 있다

상수 값 설명
adCmdUnispecified -1 명령 타입 인수를 지정하지 않는다(사용하지 않는것이 좋다)
adCmdText 1 SQL 쿼리 같은 텍스트 문자열을 나타낸다
adCMDTable 2 테이블 이름이다
adCmdStoredProc 4 스토어드 프로시저를 나타낸다
adCmdUnknown 5 기본값이며 CommandText를 알수 없는 값으로 지정한다
adCmdFile 256 저장된 레코드셋의 파일 이름을 나타낸다
adCmdTableDiret 512 테이블 이름이다
ExecuteOptionEnum

  • ExecuteOptionEnum은 CommandTypeEnum에 추가하여 사용할수 있는 상수이다
  • 다음과 같은 값들을 가지고 있다

상수 값 설명
adAsyncExecute 0X10 이 명령이 비동기 식으로 실행되도록 한다.
adAsyncFetch 0x20 앞의 행을 가져온 이후에 비동기식으로 실행되게 한다
adAsyncFetchNonBloking 0x40 adAsynFetch와 비슷하나 레코드들을 가져오는 작업으로 인해
명령이 방해되지 않게 한다
adExecuteNoRecords 0x80 어떠한 레코드들도 리턴하지 않게 한다. 대단히 유용하게 사용된다.
adOptionUnspecified -1 명령이 명시되지 않은 것으로 나타낸다.

ex ) 테이블(title)의 모든데이터를 가져온다
Conn.Execute “title”, LngRecs, adCmdTable

  • 첫번째인자로 테이블의 이름을 주고 마지막 인자로 adCmdText를 준다면 해당 테이블의 모든 데이터를 가져온다
    Tip : 모든 Execute에 의해 실행되는 구문은 레코드셋 개체를 만든다.
    사용할수도 보이지도 않지만 만든다.

ex )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!--METADATA TYPE="typelib" NAME="ADODB Type Library
UUID= "00000205-0000-0010-8000-00AA006D2EA4" --><%
Option Explicit
Dim Con
Dim strConnect, sql, LngRecs
strConnect = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=pubs;Data Source=TAEYO;Password=" '이 라인은 한 줄로 주욱 코딩하여야 한다.
Set Con = Server.CreateObject("ADODB.Connection")
Con.Open strConnect
sql = "Update titles Set price = price * 1.2"
Con.Execute sql, LngRecs, adcmdText + adExecuteNoRecords
'레코드를 생성하지 말아야 할 부분인데도 레코드를 생성하기에
'adExecuteNoRecords를 속성을 주어 레코드의 비효율성을 없앤다
Response.Write ""&LngRecs&" 권의 책의 가격이 인상되었습니다."
Con.Close
Set Con = nothing
%>

4 . Open 메소드

  • Open 메소드는 데이터 스토어와의 연결을 위해서 사용되는 메소드이다
    ex ) Conn.Open [ConnectionString], [ userid], [Password], [Options]
  • ConnectionString 속성을 사용해서 연결 문자열로 이값들을 모두 지정한 경우등에 생략이 가능하다
    ex )
1
2
3
4
5
6
7
8
9
provider="Data Source=Taeyo;Initial Catalog=pubs;User Id=sa;Password=1234"
Set Con = Server.CreateObject("ADODB.Connection")
Con.provider="SQLOLEDB.1"
con.ConnectionString = strConnection
con.open
아니면
<OBJECT RUNAT="server" PROGID="ADODB.Connection" id="db_com"></OBJECT><%
Db_com.open("Provider=SqlOleDb;Data Source=데이터아이피;UID=아이디;PWD=비밀번호;Initial Catalog=디비명")
%>이렇게 DB를 Connection 한다.

5 . OpenSchema 메소드

  • 이 메소드는 데이터 공급자로부터 스키마 정보를 얻기위한 수단을 제공한다 .
  • 이를통해 데이터베이스가 가지고 있는 테이블의 목록이 뷰의목록, 인덱스정보, 프로시저, 정보들을 알아낸다
    구문 : Set rsSchema = Con.OpenSchema(QueryType, Criteria, SchemaID)
    ex )
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <!--METADATA TYPE="typelib" NAME="ADODB Type Library
    UUID= "00000205-0000-0010-8000-00AA006D2EA4" --><%
    Option Explicit
    Dim Dbcon
    Dim Rs
    Dim strConnect
    strConnect = "Provider=sqloledb;Data Source=(local); Initial catalog=pubs; User ID=sa; Password="
    Set Dbcon = Server.CreateObject("ADODB.Connection")
    Dbcon.Open strConnect
    Set Rs = Dbcon.OpenSchema(adSchemaTables)
    '스키마 타입으로 가져온다 .
    Do Until Rs.EOF
    if Trim(Rs("Table_Type")) = "TABLE" then
    Response.Write "테이블 타입 : "&Rs("Table_Type")&" / 테이블 명 : "&Rs("Table_name")&"<br>"
    Response.Write "테이블 카달로그 : "&Rs("Table_Catalog")&" / 테이블 스키마 : "&Rs("Table_schema")&"<br><br>"
    End if
    Rs.MoveNext
    Loop
    Rs.Close
    Set Rs = Nothing
    Dbcon.Close
    Set Dbcon = Nothing
    %>

6 . 트랜젝션 관련 메소드 - BeginTrans, CommitTrans, RollbackTrans

  • 트랜젝션이란 어떤 일련의 작업들이 모두 성공하면 그 작업 내용을 적용하며 중간에 하나라도 실패가 있으면
  • 모두 원상태로 되돌리는 작업을 의미한다
  • Connection 개체의 BeginTrans메소드는 트랜젝션을 시작하기 위한 메소드고
  • CommitTrans메소드는 현재의 트랜잭션을 완료시키고 모든 변경사항을 저장하는 메소드고
  • RollbackTrans메소드는 CommitTrans와 반대로 모든 변경 사항을 원상태로 돌리는 메소드다
    ex )

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <%
    Option Explicit
    Dim Con
    Dim Rs
    Dim strConnect, sql
    strConnect = "User ID=sa;Initial Catalog=pubs;Data Source=TAEYO;Password="
    set Con = Server.CreateObject("ADODB.Connection")
    Con.Provider = "SQLOLEDB"
    Con.Open strConnect
    '업데이트 전에 titles 테이블에서의 가장 큰 책값을 적어놓자.
    '필자의 경우 그 값은 27.54 달러였다
    Con.BeginTrans
    '트랜잭션을 시작하는곳
    sql = "Update titles Set price = 10"
    Con.Execute sql
    Set Rs = Con.Execute("Select max(price) from titles")
    Response.Write "Rollback 전 : 현재 젤루 비싼 책값은 "&Rs(0)&" 달러이다.<p>"
    Rs.close
    Con.RollbackTrans
    '롤백 메소드 이다 업데이트 쿼리를 실행 안한다
    Set Rs = Con.Execute("Select max(price) from titles")
    Response.Write "Rollback 후 : 현재 젤루 비싼 책값은 "&Rs(0)&" 달러이다.<p>"
    Rs.close
    Set Rs = nothing
    Con.Close
    Set Con = nothing
    %>
  • Attributes속성을 사용하여 트랜잭션이 마무리 되면 바로 실행하는 예제다
    ex 2 )

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <!--METADATA TYPE="typelib" NAME="ADODB Type Library
    UUID= "00000205-0000-0010-8000-00AA006D2EA4" --><%
    Option Explicit
    Dim Con
    Dim Rs
    Dim strConnect, sql
    strConnect = "User ID=sa;Initial Catalog=pubs;Data Source=TAEYO;Password="
    set Con = Server.CreateObject("ADODB.Connection")
    Con.Provider = "SQLOLEDB"
    Con.Open strConnect
    '업데이트 전에 titles 테이블에서의 가장 큰 책값을 적어놓자.
    '필자의 경우 그 값은 27.54 달러였다
    'Attributes 를 지정하여 롤백 트랜잭션이 끝나는 경우 새로운 트랜잭션이 시작하게 한다.
    Con.Attributes = adXactAbortRetaining
    Con.BeginTrans
    sql = "Update titles Set price = 10"
    Con.Execute sql
    Set Rs = Con.Execute("Select max(price) from titles")
    Response.Write "트랜잭션1 내 : 현재 젤루 비싼 책값은 "&Rs(0)&" 달러이다.<p>"
    Rs.close
    Con.RollbackTrans
    'Attributes 속성의 지정으로 인해 자동으로 트랜잭션이 시작되게 된다.
    sql = "Update titles Set price = price + 10"
    Con.Execute sql
    Set Rs = Con.Execute("Select max(price) from titles")
    Response.Write "트랜잭션2 내 : 현재 젤루 비싼 책값은 "&Rs(0)&" 달러이다.<p>"
    Rs.close
    Con.CommitTrans
    Set Rs = Con.Execute("Select max(price) from titles")
    Response.Write "트랜잭션2 후 : 현재 젤루 비싼 책값은 "&Rs(0)&" 달러이다.<p>"
    Rs.close
    Set Rs = nothing
    Con.Close
    Set Con = nothing
    %>
Share