Web/ASP & ASP.NET2009. 4. 9. 19:54

< 출처 : korea.internet.com, 지은이 : 최현진 >


Connection 개체의 메서드

메서드 설명
BeginTrans 진행 중인 명령(Command)의 실행을 중단한다.
Cancel 진행 중인 명령(Command)의 실행을 중단한다.
Close 활성화된 Connection 개체를 닫는다.
CommitTrans 활성화된 Connection 개체에서 현재의 트랜잭션을 Commit한다.
Execute 명령을 실행한다. 만약 Recordset이 반환된다면, 디폴트 Recordset 개체로 반환된다.
Open Connection 개체를 데이터 소스에 연결한다.
OpenSchema Recordset 개체의 스키마 정보를 반환한다.
RollbackTrans 활성화된 Connection 개체에서 현재의 트랜잭션을 Rollback 한다.




BeginTrans, CommitTrans, RollbackTrans 메서드

이 세개의 메서드는 트랜잭션을 관리하는 메서드이다. BeginTrans 메서드는 새로운 트랜잭션을 시작하며, CommitTrans 메서드는 시작된 트랜잭션의 변경된 내용을 저장하고 트랜잭션을 종료시킨다. RollbackTrans 메서드는 시작된 트랜잭션 동안에 변경된 내용을 취소하고 트랜잭션을 종료시킨다.

이 세 메서드는 다음과 같은 구문을 사용한다.

adoCn.BeginTrans
adoCn.CommitTrans
adoCn.RollbackTrans

 

BeginTrans, CommitTrans, RollbackTrans 메서드는 CusorLocation이 클라이언트인 Connection 개체에서는 작동하지 않는다.

[예제 1]
다음 예제는 Pubs 데이터베이스의 Titles 테이블의 Type 필드의 값이 "psychology"인 필드의 값을 "self_help"로 변경한 후, 코드의 마지막에서 트랜잭션을 Rollback 하는 예이다.

01.<font size="2">Private Sub cmdBeginTrans_Click()
02.  Dim adoCn As New ADODB.Connection
03.  Dim adoRs As New ADODB.Recordset
04.  Dim strConn As String
05. 
06.  strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=Pubs;User ID=sa;Password=; "
07.  adoCn.Open strConn
08.  adoRs.Open "Titles", adoCn, adOpenKeyset, adLockOptimistic, adCmdTable
09. 
10.  adoCn.BeginTrans
11. 
12.  'Type이 "psychology" 이면 "self_help"로 변경한다.
13.  Do Until adoRs.EOF
14.    If Trim(adoRs!Type) = "psychology" Then
15.      adoRs!Type = "self_help"
16.      adoRs.Update
17.    End If
18. 
19.    adoRs.MoveNext
20.  Loop
21. 
22.  '데이터베이스로부터 다시 Recordset의 내용을 가져온다.
23.  adoRs.Requery
24.  adoRs.MoveFirst
25. 
26.  Do While Not adoRs.EOF
27.    Debug.Print adoRs!Title & " - " & adoRs!Type
28.    adoRs.MoveNext
29.  Loop
30. 
31.  '모든 변경 작업을 취소한다.
32.  adoCn.RollbackTrans
33. 
34.  adoRs.Requery
35.  adoRs.MoveFirst
36. 
37.  Do While Not adoRs.EOF
38.    Debug.Print adoRs!Title & " - " & adoRs!Type
39.    adoRs.MoveNext
40.  Loop
41. 
42.  adoRs.Close
43.  Set adoRs = Nothing
44. 
45.  adoCn.Close
46.  Set adoCn = Nothing
47.End Sub
48.</font>

[예제 2]
다음 예제는 Recordset 개체를 통한 트랜잭션이 아니라 Connection 개체의 Execute 메서드를 사용한 트랜잭션을 Rollback 하는 예이다.
01.Private Sub cmdRollbackTrans_Click()
02.  Dim adoCn As New ADODB.Connection
03.  Dim strConn As String
04. 
05.  strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=Pubs;User ID=sa;Password=;"
06.  adoCn.Open strConn
07. 
08.  adoCn.BeginTrans
09.  adoCn.Execute "Update Titles Set Type = 'self_help' Where Type = 'psychology'"
10. 
11.  '모든 변경 작업을 취소한다.
12.  adoCn.RollbackTrans
13. 
14.  adoCn.Close
15.  Set adoCn = Nothing
16.End Sub


Cancel 메서드

Cancel 메서드는 비동기적으로 실행중인 명령을 중지시킨다. Cancel 메서드는 Connection 개체의 Execute, Open 메서드에 의해서 실행된 명령을 중지시킬 수 있으며, 이 메서드들은 adConnectAsync, adExecuteAsync 옵션으로 시작되었어야만 한다. 그렇지 않을 경우에는 Cancel 메서드에 의해서 명령을 중지하려고 하면 오류가 발생한다.

Cancel 메서드는 Command 개체와 Recordset 개체에도 있다.

[예제]
다음 예제는 비동기적으로 SQL 문장을 실행 한 다음에 For…Next 문장을 사용해서 시간을 지연시킨다. 그런 다음에 여전히 SQL 문장이 실행 중이면 Cancel 메서드를 사용해서 작업을 중지하고 트랜잭션을 Rollback 시키고, 실행이 완료되었으면 트랜잭션을 Commit 하는 예이다.

01.<font size="2">Private Sub cmdCancel_Click()
02.  Dim adoCn As New ADODB.Connection
03.  Dim strConn As String
04.  Dim Sql As String
05.  Dim i As Integer
06. 
07.  strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=Pubs;User ID=sa;Password=;"
08.  adoCn.Open strConn
09. 
10.  Sql = "UPDATE Titles SET Type = 'self_help' WHERE type = 'psychology'"
11. 
12.  adoCn.BeginTrans
13. 
14.  adoCn.Execute Sql, , adAsyncExecute
15. 
16.  '비동기적으로 처리하기 때문에 Update문장이 수행되는 동안 다른 작업이 진행됨을 보여준다.
17.  For i = 1 To 10
18.    Debug.Print i
19.  Next i
20. 
21.  'For...Next문이 수행되는 동안 Update 작업이 완료되지 않았다면 작업을 Cancel 시키고 Rollback 한다. 작업이 완료되었다면 Commit한다.
22.  If adoCn.State = adStateExecuting Then
23.    adoCn.Cancel
24.    adoCn.RollbackTrans
25. 
26.    MsgBox "Update canceled."
27.  Else
28.    adoCn.CommitTrans
29. 
30.    MsgBox "Update complete."
31.  End If
32. 
33.  adoCn.Close
34.  Set adoCn = Nothing
35.End Sub
36.</font>


Close 메서드

Close 메서드는 열려진 Connection 개체와 그 하위 개체를 닫는 메서드이다. Connection 개체 또는 Recordset 개체에서 이 메서드를 사용하게 되면 해당 개체가 사용하던 시스템의 자원들이 반환되며, 개체가 사용한 메모리를 완전히 반환하기 위해서는 Set문을 사용해서 개체 변수를 Nothing으로 설정한다.

Connection 개체의 CommandTimeout 속성의 설정 값은 Command 개체의 CommandTimeout 속성 값에 영향을 미치지 못한다. 그 이유는 Connection 개체의 CommandTimeout 속성은 Command 개체의 CommandTimeout 속성에 상속되지 않기 때문이다.

Connection 개체를 Close 메서드를 사용해서 닫을 경우에 만약 하위 Recordset 개체가 사용중이었다면, Recordset에 의해서 진행 중이던 트랜잭션은 Provider에 의해서 자동으로 Rollback 된다.

[예제]
다음 예제는 Pubs 데이터베이스에 접속하고 연결을 끊는 예이다.
1.Private Sub cmdClose_Click()
2.  Dim adoCn As New ADODB.Connection
3. 
4.  adoCn.Open "DSN=Pubs"
5. 
6.  adoCn.Close
7.  Set adoCn = Nothing
8.End Sub

클라이언트에서 Connection 개체의 Close 메서드를 수행하면 서버 측에서는 Connection 개체와 데이터베이스를 연결하기 위해서 사용했던 시스템 리소스를 반환한다.


Execute 메서드

Execute 메서드는 다음과 같은 구문을 사용한다.

Recordst 개체가 반환될 경우
Set Recordset = Connection.Execute (CommandText As String, [RecordsAffected As Long], [Options As Enum])

Recordset 개체가 반환되지 않을 경우
Connection.Execute CommandText As String, [RecordsAffected As Long], [Options As Enum]

Execute 메서드는 다음과 같은 매개변수를 갖는다.


매개변수 데이터 형식 설명
CommandText String 수행할 명령을 기술하는 매개변수이며, SQL 문장, 테이블 명, 저장 프로시저를 지정할 수 있다.
RecordsAffected Long Execute 메서드에 의해서 영향을 받은 레코드의 개수를 반환한다. 예를 들면 Delete문장을 수행했는데, 10 개의 레코드가 삭제되었다면, 10 이라는 값을 반환한다.
Options Long Provider가 CommandText를 어떻게 수행할지를 결정하는 방법을 지정하는 값이며, 데이터 형식은 Long이다.


Options 매개변수는 다음 중 하나의 값을 가질 수 있다.


상수 설명
adCmdText CommandText의 값을 SQL 문장으로 처리한다.
adCmdTable CommandText의 값을 테이블 명으로 하는 SQL 문장을 만들어서 처리한다.
adCmdTableDirect CommandText의 값을 테이블 명으로 처리한다.
adCmdStoredProc CommandText의 값을 저장 프로시저로 처리한다.
adCmdUnknown 명령의 형식을 알 수 없음으로 처리한다.
adAsyncExecute 명령을 비동기적으로 수행한다.
adAsyncFetch CacheSize 속성에 지정된 수 만큼의 레코드씩 비동기적으로 처리한다.


ReturnValue(Recordset)는 수행된 명령이 결과값을 반환할 경우 디폴트 Recordset으로 생성해서 반환한다.

Execute 메서드의 수행이 완료되면 ExecuteComplete 이벤트가 발생한다.

Execute 메서드의 수행 결과가 Recordset을 반환 할 경우, 디폴트 형태로 생성된 Recordset은 읽기 전용이고, forward-only 커서이다. 그래서 Recordset 개체로 데이터를 수정할 목적이라면 Recordset 개체의 Open 메서드를 사용해서 수정 가능한 Recordset 개체를 열어야 한다.

[예제]
다음 예제는 Execute 메서드를 통해서 변경된 레코드의 개수를 보여주며, Execute 메서드를 수행하기 전과 후의 데이터를 비교해서 직접 실행창에 보여주는 예이다.

01.<strong><font size="2">Private Sub cmdExecute_Click()
02.   Dim adoCn As New ADODB.Connection
03.   Dim strConn As String
04.   Dim Sql As String
05.   Dim iAffected As Integer
06.   Dim adoRs As New ADODB.Recordset
07. 
08.   Sql = "UPDATE Titles SET Type = 'self_help' WHERE Type = 'psychology'"
09. 
10.   'Connection 연결
11.   strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=Pubs;User ID=sa;Password=; "
12. 
13.   adoCn.Open strConn
14. 
15.   adoRs.Open "Titles", adoCn, adOpenStatic, adLockOptimistic
16. 
17.   'Update 문장을 수행하기 전의 데이터
18.   While Not adoRs.EOF
19.      Debug.Print adoRs!Title & ", " & adoRs!Type & vbCrLf
20. 
21.      adoRs.MoveNext
22.   Wend
23. 
24.   adoCn.Execute Sql, iAffected
25. 
26.   'Update 문장에 영향을 받은 레코드 수
27.   Debug.Print iAffected & "개의 레코드가 변경되었음."
28. 
29.   adoRs.Requery
30. 
31.   'Update 문장을 수행한 후의 데이터
32.   Do While Not adoRs.EOF
33.      Debug.Print adoRs!Title & ", " & adoRs!Type & vbCrLf
34. 
35.      adoRs.MoveNext
36.   Loop
37. 
38.   adoRs.Close
39.   Set adoRs = Nothing
40. 
41.   adoCn.Close
42.   Set adoCn = Nothing
43.End Sub
44.</font></strong>


Open 메서드

Open 메서드는 다음과 같은 구문을 사용한다.
Open [ConnectionString As String], [UserID As String], [Password As String], [Options As Enum]

ConnectionString은 데이터베이스 연결에 사용할 정보를 지정하는 Connection 개체의 속성이며, User ID는 데이터베이스의 사용자 계정이며, Password는 사용자 계정의 암호이다. 옵션은 Connection 개체를 동기적 또는 비동기적으로 연결할 때 사용하는 매개변수로서 옵션을 adAsyncConnect로 지정하면 비동기적으로 Connection 개체를 연결하며, Connection 개체가 성공적으로 데이터 소스에 연결 되면 ConnectComplete 이벤트가 발생한다. 디폴트 값을 동기적으로 데이터 소스에 연결하는 것이다.

Open 메서드를 사용하기 전에 Connection 개체의 ConnectionString 속성을 이미 설정했다면, ConnectionString 매개변수는 지정하지 않아도 된다. 이유는 Connection 개체의 ConnectionString 속성이 Open 메서드의 ConnectionString 매개변수로 상속되기 때문이다.

[예제1]
다음 예제는 Pubs 데이터베이스에 Connection 개체를 연결하는 예이다.
01.Private Sub cmdOpen_Click()
02.  Dim adoCn As New ADODB.Connection
03.  Dim strConn As String
04. 
05.  strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=Pubs;User Id=sa;Password=; "
06.  adoCn.Open strConn
07. 
08.  Debug.Print "Opened"
09. 
10.  adoCn.Close
11.  Set adoCn = Nothing
12. 
13.  Debug.Print "Closed"
14.End Sub

[예제 2]
다음 예제는 Pubs 데이터베이스에 Connection 개체를 비동기적으로 연결하는 예이다.
01.Private Sub cmdOpenAsync_Click()
02.  Dim adoCn As New ADODB.Connection
03.  Dim strConn As String
04. 
05.  strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=Pubs;User Id=sa;Password=; "
06.  adoCn.Open strConn, , , adAsyncConnect
07. 
08.  Debug.Print "Opened - Async"
09. 
10.  adoCn.Close
11.  Set adoCn = Nothing
12. 
13.  Debug.Print "Closed"
14.End Sub


OpenSchema 메서드

OpenSchema 메서드는 Provider를 통해서 데이터베이스의 스키마 정보를 얻는 메서드이며, 다음과 같은 구문을 사용한다.
Set Recordset = Connection.OpenSchema (QueryType, Criteria, SchemaID)

반환되는 Recordset은 데이터베이스에 대한 스키마 정보를 갖고 있으며, 읽기 전용의 Static 커서로 되어 있다.

QueryType은 질의의 타입을 지정하는 매개변수이며, Criteria는 QueryType에 따라서 지정하는 질의의 조건이며 선택사항이다.


QueryType 값 Criteria 값
adSchemaAsserts CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
adSchemaCatalogs CATALOG_NAME
adSchemaCharacterSets CHARACTER_SET_CATALOG
CHARACTER_SET_SCHEMA
CHARACTER_SET_NAME
adSchemaCheckConstraints CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
adSchemaCollations COLLATION_CATALOG
COLLATION_SCHEMA
COLLATION_NAME
adSchemaColumnDomainUsage DOMAIN_CATALOG
DOMAIN_SCHEMA
DOMAIN_NAME
COLUMN_NAME
adSchemaColumnPrivileges TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
GRANTOR
GRANTEE
adSchemaColumns TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAM
adSchemaConstraintColumnUsage TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME/td>
adSchemaConstraintTableUsage TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
adSchemaForeignKeys PK_TABLE_CATALOG
PK_TABLE_SCHEMA
PK_TABLE_NAME
FK_TABLE_CATALOG
FK_TABLE_SCHEMA
FK_TABLE_NAME
adSchemaIndexes TABLE_CATALOG
TABLE_SCHEMA
INDEX_NAME
TYPE
TABLE_NAME
adSchemaKeyColumnUsage CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
adSchemaPrimaryKeys PK_TABLE_CATALOG
PK_TABLE_SCHEMA
PK_TABLE_NAME
adSchemaProcedureColumns PROCEDURE_CATALOG
PROCEDURE_SCHEMA
PROCEDURE_NAME
COLUMN_NAME
adSchemaProcedureParameters PROCEDURE_CATALOG
PROCEDURE_SCHEMA
PROCEDURE_NAME
PARAMTER_NAME
adSchemaProcedures PROCEDURE_CATALOG
PROCEDURE_SCHEMA
PROCEDURE_NAME
PARAMTER_TYPE
adSchemaProviderSpecific 아래 설명 참조
adSchemaProviderTypes DATA_TYPE
BEST_MATCH
adSchemaReferentialConstraints CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
adSchemaSchemata CATALOG_NAME
SCHEMA_NAME
SCHEMA_OWNER
adSchemaSQLLanguages <없음>
adSchemaStatistics TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
adSchemaTableConstraints CONSTRAINT_CATALOG
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
CONSTRAINT_TYPE
adSchemaTablePrivileges TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
GRANTOR
GRANTEE
adSchemaTables TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
TABLE_TYPE
adSchemaTranslations TRANSLATION_CATALOG
TRANSLATION_SCHEMA
TRANSLATION_NAME
adSchemaUsagePrivileges OBJECT_CATALOG
OBJECT_SCHEMA
OBJECT_NAME
OBJECT_TYPE
GRANTOR
GRANTEE
adSchemaViewColumnUsage VIEW_CATALOG
VIEW_SCHEMA
VIEW_NAME
adSchemaViewTableUsage VIEW_CATALOG
VIEW_SCHEMA
VIEW_NAME
adSchemaViews TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME


SchemaID는 OLE DB의 사양에 의해서 정의되지 않은 Provider 스키마 질의를 위한 GUID이다. 만약 QueryType을 adSchemaProviderSpecific으로 설정했을 경우에만 반드시 필요하다.

OpenSchema 메서드는 서버에 있는 데이터베이스의 정보 또는 테이블의 필드의 정보와 같은 데이터 소스의 정보를 반환하는 메서드이다.

Criteria 인수는 스키마 질의의 결과로 사용되어질 수 있는 값들의 배열이다. 각 스키마 질의는 각각의 서로 다른 매개변수를 가지며, 실제 스키마는 IDBSchemaRowset 인터페이스 하에서 OLE DB의 사양에 의해서 정의된다.

QueryType 인수로 adSchemaProviderSpecific가 사용되면 Provider는 비 표준 스키마 질의를 생성하며, SchemaID 인수는 실행하기 위해서 스키마 질의의 GUID를 요구하게 된다. 만약 SchemaID를 지정하지 않으면 실행 오류가 발생하게 된다.

Provider는 OEL DB 표준 스키마 질의의 모두를 지원하기를 요구하지 않는다. 특별히 adSchemaTables, adSchemaColumns, adSchemaProviderTypes 이 세가지만, OLE DB의 사용을 요구하고 있다.

OpenSchema 메서드는 클라이언트 측의 Connection 개체에서는 사용할 수 없다.

[예제 1]
다음 예제는 SQL 서버의 Pubs 데이터베이스의 테이블에 대한 정보를 조회하는 예이다.

01.<font size="2">Private Sub cmdOpenSchema_Click()
02.  Dim adoCn As New ADODB.Connection
03.  Dim adoRs As New ADODB.Recordset
04.  Dim strConn As String
05. 
06.  strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=Pubs;User ID=sa;Password=;"
07.  adoCn.Open strConn
08. 
09.  Set adoRs = adoCn.OpenSchema(adSchemaTables)
10. 
11.  Do Until adoRs.EOF
12.    Debug.Print "테이블명: " & adoRs!Table_Name & vbCrLf & _
13.      "테이블 타입: " & adoRs!Table_Type & vbCr
14.    adoRs.MoveNext
15.  Loop
16. 
17.  adoRs.Close
18.  Set adoRs = Nothing
19. 
20.  adoCn.Close
21.  Set adoCn = Nothing
22.End Sub
23.</font>

[예제 2]
다음 예제는 Criteria 매개변수를 이용해서 Pubs 데이터베이스의 뷰(View)에 대한 정보를 조회하는 예이다.
01.Private Sub cmdOpenSchema2_Click()
02.  Dim adoCn As New ADODB.Connection
03.  Dim adoRs As New ADODB.Recordset
04.  Dim strConn As String
05. 
06.  strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=Pubs;User ID=sa;Password=;"
07.  adoCn.Open strConn
08. 
09.  Set adoRs = adoCn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "VIEW"))
10. 
11.  Do Until adoRs.EOF
12.    Debug.Print "테이블 명: " & adoRs!Table_Name & vbCrLf & _
13.      "테이블 타입:" & adoRs!Table_Type & vbCr
14. 
15.    adoRs.MoveNext
16.  Loop
17. 
18.  adoRs.Close
19.  Set adoRs = Nothing
20. 
21.  adoCn.Close
22.  Set adoCn = Nothing
23.End Sub
Posted by Huikyun