TN042: ODBC 드라이버 개발자 권고 사항

이 노트는 ODBC 드라이버 작가 대 한 지침을 설명합니다. 그것은 일반적인 요구 사항 및 가정 MFC 데이터베이스 클래스에서 시키는 ODBC 기능 및 다양 한 예상된 의미 세부 정보를 설명 합니다. (ForwardOnly, 스냅숏 및 다이너셋) 세 CRecordset 오픈 모드를 지원 하기 위해 필요한 드라이버 기능을 설명 하는。

ODBC의 커서 라이브러리

MFC 데이터베이스 클래스는 사용자가 많은 경우에 능가 하는 대부분의 수준 1 ODBC 드라이버에서 제공 하는 기능을 기능을 제공 합니다. 다행히도, ODBC의 커서 라이브러리 데이터베이스 클래스와 드라이버 간의 자체 레이어 됩니다. 그리고 많은이 추가 기능을 자동으로 제공 됩니다.

예를 들어, 대부분의 1.0 드라이버 뒤로 스크롤을 지원 하지는 않습니다. 커서 라이브러리 수, 검색 및 드라이버에서 행을 캐시 되며 SQLExtendedFetch 에서 FETCH_PREV 호출에 요청한 대로 제시。

커서 라이브러리 의존성의 또 다른 중요 한 예는 위치 지정된 업데이트. 대부분의 1.0 드라이버 또한 없어 위치 지정된 업데이트 하지만 커서 라이브러리는 현재 캐시 된 데이터 값 또는 캐시 된 타임 스탬프 값에 따라 데이터 원본에 대상 행을 식별 하는 update 문을 생성 됩니다.

클래스 라이브러리는 여러 행 집합의 사용 하는 절대. 따라서, 몇 SQLSetPos 문이 항상 행 집합의 행 1에 적용 됩니다.

CDatabases

각 CDatabase 단일 요소로할당합니다. ( CDatabase ExecuteSQL 함수를 사용 하는 경우 HSTMT 일시적으로 할당 됩니다.) 그래서 HENV 당 여러 요소로s를 지원 해야 합니다 여러 개의 CDatabase의 필요한 경우。

데이터베이스 클래스는 커서 라이브러리가 필요합니다. 이것은 반영 SQLSetConnections 전화 SQL_ODBC_CURSORS, SQL_CUR_USE_ODBC。

SQLDriverConnect, SQL_DRIVER_COMPLETE 는 CDatabase::Open 에 의해 데이터 소스에 연결。

드라이버 SQLGetInfo SQL_ODBC_API_CONFORMANCE gt;을 지원 해야 합니다 SQL_OAC_LEVEL1, SQLGetInfo SQL_ODBC_SQL_CONFORMANCE = > = SQL_OSC_MINIMUM。

CDatabase 및 종속 레코드에 대 한 지원 해야 하는 트랜잭션 위해서는 SQLGetInfoSQL_CURSOR_COMMIT_BEHAVIOR 및 SQL_CURSOR_ROLLBACK_BEHAVIOR SQL_CR_PRESERVE가 있어야 합니다. 그렇지 않으면 트랜잭션 제어를 수행 하는 시도 무시 됩니다. 。

SQLGetInfo SQL_DATA_SOURCE_READ_ONLY 를 지원 해야 합니다. 데이터 소스에 없습니다 업데이트 작업을 수행할 것입니다 "Y"를 반환 하는 경우。

읽기 전용 데이터 소스 readonly를 설정 하려고 시도와 SQLSetConnectOptionSQL_ACCESS_MODE, SQL_MODE_READ_ONLY 로 만든 CDatabase 열릴 경우 。

SQLGetInfoSQL_IDENTIFIER_QUOTE_CHAR 호출으로 드라이버에서이 정보를 반환 합니다 식별자 인용 필요로 하는 경우 。

디버깅 목적으로, SQLGetInfo SQL_DBMS_VER 및 SQL_DBMS_NAME 는 검색 드라이버에서。

SQLSetStmtOptionSQL_QUERY_TIMEOUT 및 SQL_ASYNC_ENABLE 는 CDatabase 요소로 에서 호출 될 수 있습니다. 。

또는 모든 인수가 NULL SQLError 호출 될 수 있습니다.

물론, SQLAllocEnv, SQLAllocConnect, SQLDisconnect 및 SQLFreeConnect 지원 해야 합니다.

ExecuteSQL

추가로 할당 하 고 임시 HSTMT해제 ExecuteSQL 호출 SQLExecDirect, SQLFetch, SQLNumResultCol 및 SQLMoreResults합니다. SQLCancel HSTMT 에 호출 될 수 있습니다.

GetDatabaseName

SQLGetInfo SQL_DATABASE_NAME 호출 될。

BeginTrans, CommitTrans, Rollback

SQLSetConnectOption트랜잭션 요청 하는 경우 SQL_AUTOCOMMIT 및 SQLTransactSQL_COMMIT, SQL_ROLLBACK 및 SQL_AUTOCOMMIT 를 호출할 것입니다. 。

CRecordsets

SQLAllocStmt, SQLPrepare, SQLExecute ( Open 및 Requery), (에 대 한 업데이트 작업) SQLExecDirect , SQLFreeStmt 을 지원 해야 합니다. 다양 한 시간에 설정 결과에 SQLNumResultCols 및 SQLDescribeCol 을 호출 됩니다.

바인딩 매개 변수 데이터 및 DATA_AT_EXEC 기능에 대 한 SQLSetParam 를 광범위 하 게 사용。

SQLBindCol 등록 광범위 하 게 사용 하는 ODBC로 열 데이터 저장소 위치를 출력。

두 개의 SQLGetData 호출 SQL_LONG_VARCHAR 및 SQL_LONG_VARBINARY 데이터를 검색 하는 데 사용 됩니다. 첫 번째 호출은 0, cbMaxValue 하지만 유효한 pcbValue SQLGetData 를 호출 하 여 열 값의 총 길이 찾으려고 시도 합니다. PcbValue SQL_NO_TOTAL를 보유 하는 경우 예외가 throw 됩니다. 그렇지 않으면 HGLOBAL 할당, 및 다른 SQLGetData 호출 전체 결과 검색。

업데이트

비관적 잠금 요청 SQLGetInfo SQL_LOCK_TYPES 쿼리할 수 있습니다. SQL_LCK_EXCLUSIVE 지원 되지 않는 경우 예외가 throw 될 것입니다.

CRecordset (스냅숏 또는 다이너셋) 업데이트 하려고 두 번째 HSTMT 할당 될 수 있습니다. 두 번째 HSTMT를 지원 하지 않는 드라이버에 대 한 커서 라이브러리에서는이 기능을 시뮬레이션 합니다. 불행히도,이 때로는 두 번째 HSTMT의 요청을 처리 하기 전에 완료를 첫 번째 HSTMT 에 현재 쿼리를 강제로 의미 수 있습니다.

SQLFreeStmt SQL_CLOSE 및 SQL_RESET_PARAMS 와 SQLGetCursorName 업데이트 작업 하는 동안 호출 됩니다.

OutputColumns에서 CLongBinarys 경우에 ODBC의 DATA_AT_EXEC 기능을 지원 되어야 합니다. 이때 SQLExecDirect, SQLParamData 에서 SQLPutData SQL_NEED_DATA 를 반환。

SQLRowCount SQLExecDirect 여 단 1 레코드가 업데이트 되었는지 확인 하려면 실행 후 라고。

ForwardOnly 커서

만 SQLFetch 은 이동 작업에 필요 합니다. 참고 forwardOnly 커서 업데이트를 지원 하지 않습니다。

스냅샷 커서

스냅샷 기능 SQLExtendedFetch 지원이 필요합니다. 위에서 설명 했 듯이 ODBC 커서 라이브러리는 드라이버 SQLExtendedFetch를 지원 하지 않으며 자체 필요한 지원을 제공 하는 경우 감지。

SQLGetInfo, SQL_SCROLL_OPTIONS SQL_SO_STATIC 를 지원 해야 합니다.

다이너셋 커서

다음은 다이너셋을 여는 데 필요한 최소 지원:

SQLGetInfo, SQL_ODBC_VER gt;을 반환 해야 합니다. "01"(&G)。

SQLGetInfo, SQL_SCROLL_OPTIONS SQL_SO_KEYSET_DRIVEN 를 지원 해야 합니다.

SQLGetInfo, SQL_ROW_UPDATES 는 "Y"를 반환 해야 합니다.

SQLGetInfo, SQL_POSITIONED_UPDATES SQL_PS_POSITIONED_DELETE 및 SQL_PS_POSITIONED_UPDATE 를 지원 해야 합니다.

또한, 비관적 잠금을 요청 하는 경우 irow 1, fRefresh FALSE 및 무리와 함께 SQLSetPos 를 호출 SQL_LCK_EXCLUSIVE 만든 것입니다.

기술 노트 번호로 |nbsp; 카테고리별 기술 노트(&N)

Index