연결 전환
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) | -- | -- |