다음을 통해 공유


연결 전환

ODBC 연결의 상태는 다음과 같습니다.

시스템 상태 설명
C0 할당되지 않은 환경, 할당되지 않은 연결
C1 할당된 환경, 할당되지 않은 연결
C2 할당된 환경, 할당된 연결
C3 연결 함수에 데이터 필요
C4 연결된 연결
C5 연결된 연결, 할당된 문
C6 연결된 연결, 진행 중인 트랜잭션 연결에 할당된 문이 없는 상태 C6에 연결이 있을 수 있습니다. 예를 들어 연결이 수동 커밋 모드이고 C4 상태라고 가정합니다. 문이 할당되고 실행(트랜잭션 시작)된 다음 해제된 경우 트랜잭션은 활성 상태로 유지되지만 연결에 대한 문은 없습니다.

다음 표에서는 각 ODBC 함수가 연결 상태에 미치는 영향을 보여 줍니다.

SQLAllocHandle

C0

아니 Env.
C1 할당되지 않음 C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
C1[1] --[5] --[5] --[5] --[5] --[5] --[5]
(IH)[2] C2 --[5] --[5] --[5] --[5] --[5]
(IH)[3] (IH) (08003) (08003) C5 --[5] --[5]
(IH)[4] (IH) (08003) (08003) --[5] --[5] --[5]

[1] 이 행은 HandleType이 SQL_HANDLE_ENV 때 전환을 표시합니다.

[2] 이 행은 HandleType이 SQL_HANDLE_DBC 때 전환을 표시합니다.

[3] 이 행은 HandleType이 SQL_HANDLE_STMT 때 전환을 표시합니다.

[4] 이 행은 HandleType이 SQL_HANDLE_DESC 때 전환을 표시합니다.

[5] OutputHandlePtr사용하여 SQLAllocHandle을 호출하면 이전의 핸들 내용과 관계없이 처리되는 유효한 핸들 덮어쓰기가 덮어쓰여지고 ODBC 드라이버에 문제가 발생할 수 있습니다. 다시 할당하기 전에 핸들을 해제하기 위해 SQLFreeHandle을 호출하지 않고 *OutputHandlePtr에 대해 정의된 동일한 애플리케이션 변수로 SQLAllocHandle을 두 번 호출하는 것은 잘못된 ODBC 애플리케이션 프로그래밍입니다. 이러한 방식으로 ODBC 핸들을 덮어쓰면 ODBC 드라이버에서 일관되지 않은 동작 또는 오류가 발생할 수 있습니다.

SQLBrowseConnect

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
(IH) (IH) C3 [d] C4 [s] -- [d] C2 [e] C4 [s] (08002) (08002) (08002)

SQLCloseCursor

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
(IH) (IH) (IH) (IH) (IH) -- --[1] C5[2]

[1] 연결이 수동 커밋 모드였습니다.

[2] 연결이 자동 커밋 모드였습니다.

SQLColumnPrivileges, SQLColumns, SQLForeignKeys, SQLGetTypeInfo, SQLPrimaryKeys, SQLProcedureColumns, SQLProcedures, SQLSpecialColumns, SQLStatistics, SQLTablePrivileges 및 SQLTables

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --

[1] 연결이 자동 커밋 모드이거나 데이터 원본이 트랜잭션을 시작하지 않았습니다.

[2] 연결이 수동 커밋 모드에 있었고 데이터 원본이 트랜잭션을 시작했습니다.

SQLConnect

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
(IH) (IH) C4 (08002) (08002) (08002) (08002)

SQLCopyDesc, SQLGetDescField, SQLGetDescRec, SQLSetDescField 및 SQLSetDescRec

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
(IH) (IH) (IH) (IH) --[1] -- --

[1] 이 상태에서 애플리케이션에서 사용할 수 있는 유일한 설명자는 명시적으로 할당된 설명자입니다.

SQLDataSources 및 SQLDrivers

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
(IH) -- -- -- -- -- --

SQLDisconnect

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
(IH) (IH) (08003) C2 C2 C2 25000

SQLDriverConnect

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
(IH) (IH) C4 s -- n[f] (08002) (08002) (08002) (08002)

SQLEndTran

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
(IH)[1] --[3] --[3] --[3] -- -- --[4] 또는 ([5], [6], [8]) C4[5] 및 [7] C5[5], [6] 및 [9]
(IH)[2] (IH) (08003) (08003) -- -- C5

[1] 이 행은 HandleType이 SQL_HANDLE_ENV 때 전환을 표시합니다.

[2] 이 행은 HandleType이 SQL_HANDLE_DBC 때 전환을 표시합니다.

[3] 연결이 연결된 상태가 아니므로 트랜잭션의 영향을 받지 않습니다.

[4] 연결에서 커밋 또는 롤백이 실패했습니다. 이 경우 함수는 SQL_ERROR 반환합니다.

[5] 연결에서 커밋 또는 롤백에 성공했습니다. 이 함수는 다른 연결에서 커밋 또는 롤백이 실패한 경우 SQL_ERROR 반환하거나, 커밋 또는 롤백이 모든 연결에서 성공하면 함수가 SQL_SUCCESS 반환합니다.

[6] 연결에 하나 이상의 문이 할당되었습니다.

[7] 연결에 할당된 문이 없습니다.

[8] 연결에 열려 있는 커서가 하나 이상 있고 트랜잭션이 커밋되거나 롤백될 때 데이터 원본은 커서를 유지합니다(CompletionType이 SQL_COMMIT 또는 SQL_ROLLBACK 여부에 따라 다름). 자세한 내용은 SQLGetInfo의 SQL_CURSOR_COMMIT_BEHAVIOR 및 SQL_CURSOR_ROLLBACK_BEHAVIOR 특성을 참조하세요.

[9] 연결에 열려 있는 커서가 있는 문이 있는 경우 트랜잭션이 커밋되거나 롤백될 때 커서가 유지되지 않습니다.

SQLExecDirect 및 SQLExecute

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] C6[3] --

[1] 연결이 자동 커밋 모드에 있었고 실행된 문이 커서 사양(예: SELECT 문)이 아니거나 연결이 수동 커밋 모드에 있었고 실행된 문이 트랜잭션을 시작하지 않았습니다.

[2] 연결이 자동 커밋 모드에 있었고 실행된 문은 커서 사양(예: SELECT 문)이었습니다.

[3] 연결이 수동 커밋 모드에 있었고 데이터 원본이 트랜잭션을 시작했습니다.

SQLFreeHandle

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
(IH)[1] C0 (HY010) (HY010) (HY010) (HY010) (HY010)
(IH)[2] (IH) (C1) (HY010) (HY010) (HY010) (HY010)
(IH)[3] (IH) (IH) (IH) (IH) C4[5] --[6] --[7] C4[5] 및 [8] C5[6] 및 [8]
(IH)[4] (IH) (IH) (IH) -- -- --

[1] 이 행은 HandleType이 SQL_HANDLE_ENV 때 전환을 표시합니다.

[2] 이 행은 HandleType이 SQL_HANDLE_DBC 때 전환을 표시합니다.

[3] 이 행은 HandleType이 SQL_HANDLE_STMT 때 전환을 표시합니다.

[4] 이 행은 HandleType이 SQL_HANDLE_DESC 때 전환을 표시합니다.

[5] 연결에 할당된 문이 하나뿐이었습니다.

[6] 연결에 여러 문이 할당되었습니다.

[7] 연결이 수동 커밋 모드였습니다.

[8] 연결이 자동 커밋 모드였습니다.

SQLFreeStmt

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
(IH)[1] (IH) (IH) (IH) (IH) -- C5[3] --[4]
(IH)[2] (IH) (IH) (IH) (IH) -- --

[1] 이 행은 Option 인수가 SQL_CLOSE 때 트랜잭션을 표시합니다.

[2] Option 인수가 SQL_UNBIND 또는 SQL_RESET_PARAMS 경우 이 행은 트랜잭션을 표시합니다.

[3] 연결이 자동 커밋 모드에 있었고 이 문을 제외한 모든 문에는 커서가 열려 있지 않았습니다.

[4] 연결이 수동 커밋 모드이거나 자동 커밋 모드이고 커서가 하나 이상의 다른 문에서 열려 있었습니다.

SQLGetConnectAttr

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
IH IH --[1] 08003[2] HY010 -- -- --

[1] 특성 인수가 SQL_ATTR_ACCESS_MODE, SQL_ATTR_AUTOCOMMIT, SQL_ATTR_LOGIN_TIMEOUT, SQL_ATTR_ODBC_CURSORS, SQL_ATTR_TRACE 또는 SQL_ATTR_TRACEFILE 연결 특성에 대해 설정된 값입니다.

[2] 특성 인수가 SQL_ATTR_ACCESS_MODE, SQL_ATTR_AUTOCOMMIT, SQL_ATTR_LOGIN_TIMEOUT, SQL_ATTR_ODBC_CURSORS, SQL_ATTR_TRACE 또는 SQL_ATTR_TRACEFILE 아니었으며 연결 특성에 대한 값이 설정되지 않았습니다.

SQLGetDiagField 및 SQLGetDiagRec

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
(IH)[1] -- -- -- -- -- --
(IH)[2] (IH) -- -- -- -- --
(IH)[3] (IH) (IH) (IH) (IH) -- --
(IH)[4] (IH) (IH) (IH) -- -- --

[1] 이 행은 HandleType이 SQL_HANDLE_ENV 때 전환을 표시합니다.

[2] 이 행은 HandleType이 SQL_HANDLE_DBC 때 전환을 표시합니다.

[3] 이 행은 HandleType이 SQL_HANDLE_STMT 때 전환을 표시합니다.

[4] 이 행은 HandleType이 SQL_HANDLE_DESC 때 전환을 표시합니다.

SQLGetEnvAttr

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
IH -- -- -- -- -- --

SQLGetFunctions

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
IH IH HY010 HY010 -- -- --

Sqlgetinfo

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
IH IH --[1] 08003[2] 08003 -- -- --

[1] InfoType 인수가 SQL_ODBC_VER.

[2] InfoType 인수가 SQL_ODBC_VER 않았습니다.

SQLMoreResults

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --[3] C5[1]

[1] 연결이 자동 커밋 모드에 있었고 SQLMoreResults에 대한 호출이 커서 사양의 결과 집합 처리를 초기화하지 않았습니다.

[2] 연결이 자동 커밋 모드에 있었고 SQLMoreResults를 호출하면 커서 사양의 결과 집합 처리가 초기화되었습니다.

[3] 연결이 수동 커밋 모드였습니다.

SQLNativeSql

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
(IH) (IH) (08003) (08003) -- -- --

SQLPrepare

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --

[1] 연결이 자동 커밋 모드이거나 데이터 원본이 트랜잭션을 시작하지 않았습니다.

[2] 연결이 수동 커밋 모드에 있었고 데이터 원본이 트랜잭션을 시작했습니다.

SQLSetConnectAttr

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
IH IH --[1] 08003[2] HY010 --[3] 08002[4] HY011[5] --[3] 08002[4] HY011[5] --[3] 및 [6] C5[8] 08002[4] HY011[5] 또는 [7]

[1] 특성 인수가 SQL_ATTR_TRANSLATE_LIB 또는 SQL_ATTR_TRANSLATE_OPTION 않았습니다.

[2] 특성 인수가 SQL_ATTR_TRANSLATE_LIB 또는 SQL_ATTR_TRANSLATE_OPTION.

[3] 특성 인수가 SQL_ATTR_ODBC_CURSORS 또는 SQL_ATTR_PACKET_SIZE 않았습니다.

[4] 특성 인수가 SQL_ATTR_ODBC_CURSORS.

[5] 특성 인수가 SQL_ATTR_PACKET_SIZE.

[6] 특성 인수가 SQL_ATTR_AUTOCOMMIT 않았거나 Attribute 인수가 SQL_ATTR_AUTOCOMMIT 이 특성을 설정해도 트랜잭션이 커밋되지 않았습니다.

[7] 특성 인수가 SQL_ATTR_TXN_ISOLATION.

[8] 특성 인수가 SQL_ATTR_AUTOCOMMIT 이 특성을 설정하면 트랜잭션이 커밋됩니다.

SQLSetEnvAttr

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
(IH) -- -- (HY010) -- -- --

기타 모든 ODBC 함수

C0

아니 Env.
C1

할당되지 않음
C2

Allocated
C3

데이터 필요
C4

연결됨
C5

C6

트랜잭션
(IH) (IH) (IH) (IH) (IH) -- --