TN042: ODBC sterownik autora zalecenia

Uwaga ta opisuje wytycznych dla pisarzy sterownika ODBC. Podkreślono, wymagania ogólne i założenia funkcji ODBC, które klas MFC bazy danych i różnych oczekiwane informacje semantyczne. Opisano funkcje wymagany sterownik obsługuje trzy CRecordset otwarte trybów (forwardOnly, migawki i dynamiczny).

Biblioteka kursorów ODBC firmy

Klas MFC bazy danych obecnie funkcjonalności do użytkownika, który w wielu przypadkach nadanymi funkcjonalności dostarczanej przez większość sterowników ODBC poziomu 1. Na szczęście Biblioteka kursorów ODBC z warstw samego między klasami baz danych i sterownik i automatycznie dostarcza wiele dodatkowych funkcji.

Na przykład większość sterowników 1.0 nie obsługują, przewijania do tyłu. Biblioteka kursorów można wykrywania i będzie buforują wiersze ze sterownika i przedstawić je na żądanie na FETCH_PREV wywołań procedury SQLExtendedFetch.

Innym ważnym przykładem kursor biblioteki zależność jest pozycjonowane aktualizacje. Większość sterowników 1.0 również nie mają pozycjonowane aktualizacje, ale Biblioteka kursorów spowoduje wygenerowanie instrukcji update, które identyfikują wiersze docelowych w źródle danych, na podstawie bieżącej wartości buforowane dane lub wartość pamięci podręcznej sygnatury czasowej.

Biblioteka klas nigdy nie korzysta z wielu zestawów wierszy. W związku z tym kilka instrukcji SQLSetPos są zawsze stosowane do wiersza 1 zestawu wierszy.

CDatabases

Każdy CDatabase przydziela jeden HDBC. (Jeśli używana jest funkcja ExecuteSQL CDatabase, HSTMT jest czasowo przydzielonych.) Więc jeśli wiele CDatabasefirmy są wymagane, muszą być obsługiwane wielu s HDBC HENV.

Klasy bazy danych wymaga Biblioteka kursorów. Znalazło to odzwierciedlenie w wywołaniu SQLSetConnections SQL_ODBC_CURSORS, SQL_CUR_USE_ODBC.

SQLDriverConnect, SQL_DRIVER_COMPLETE jest używany przez CDatabase::Open w celu ustanowienia połączenia ze źródłem danych.

Kierowca musi obsługiwać SQLGetInfo SQL_ODBC_API_CONFORMANCE gt; = SQL_OAC_LEVEL1, SQLGetInfo SQL_ODBC_SQL_CONFORMANCE > = SQL_OSC_MINIMUM.

Aby transakcje mają być wspierane CDatabase i jego zależne zestawy rekordów SQLGetInfo SQL_CURSOR_COMMIT_BEHAVIOR i SQL_CURSOR_ROLLBACK_BEHAVIOR muszą mieć SQL_CR_PRESERVE. W przeciwnym razie zostanie zignorowana próby wykonania kontroli transakcji.

SQLGetInfo SQL_DATA_SOURCE_READ_ONLY musi być obsługiwany. Jeżeli zwraca "Y", nie operacji aktualizacji będą wykonywane w źródle danych.

Jeśli CDatabase jest otwarty tylko do odczytu próba ustawienia readonly źródła danych dokonuje się z SQLSetConnectOption SQL_ACCESS_MODE, SQL_MODE_READ_ONLY.

Jeśli identyfikatory wymagają, cytując, informacje te powinny być zwrócone ze sterownika z wywołanieSQL_IDENTIFIER_QUOTE_CHAR SQLGetInfo .

Dla celów debugowania, SQLGetInfo SQL_DBMS_VER i SQL_DBMS_NAME są pobierane od kierowcy.

SQLSetStmtOption SQL_QUERY_TIMEOUT i SQL_ASYNC_ENABLE może być wywołana dla CDatabase HDBC.

SQLError może być wywołana z lub wszystkich argumentów wartości NULL.

Oczywiście SQLAllocEnv, SQLAllocConnect, funkcja ODBC SQLDisconnect i SQLFreeConnect muszą być obsługiwane.

ExecuteSQL

W dodatkowe do przydzielania i zwalnianiu tymczasowego HSTMT ExecuteSQL wywołuje SQLExecDirect, SQLFetch, SQLNumResultCol i SQLMoreResults. SQLCancel może być wywołana dla HSTMT.

GetDatabaseName

SQLGetInfo SQL_DATABASE_NAME zostanie wywołany.

BeginTrans, CommitTrans, wycofywania

SQLSetConnectOption SQL_AUTOCOMMIT i SQLTransact SQL_COMMIT, SQL_ROLLBACK i SQL_AUTOCOMMIT zostanie wywołany, jeśli transakcja żądań.

CRecordsets

SQLAllocStmt, funkcję SQLPrepare, SQLExecute (dla otwartego i Requery), SQLExecDirect (dla operacji aktualizacji), SQLFreeStmt musi być obsługiwany. SQLNumResultCols i SQLDescribeCol będzie wywoływana w ich rezultaty w zestawieniu w różnym czasie.

SQLSetParam jest stosowana do wiązania danych parametru i funkcji DATA_AT_EXEC.

Procedura SQLBindCol jest szeroko stosowane do rejestrowania produkcji Lokalizacja magazynów danych kolumny z ODBC.

Dwa wywołania SQLGetData są używane do pobierania danych SQL_LONG_VARCHAR i SQL_LONG_VARBINARY . Pierwsze wywołanie próbuje znaleźć całkowitą długość wartości kolumny, wywołując SQLGetData cbMaxValue 0, ale ważne pcbValue. Jeśli pcbValue posiada SQL_NO_TOTAL, wyjątek jest generowany. W przeciwnym wypadku przydzielone HGLOBAL i inne wywołanie SQLGetData dokonać pobrać cały wynik.

Aktualizowanie

Jeśli wymagana jest pesymistycznego blokowania, będą badane SQLGetInfo SQL_LOCK_TYPES . Jeśli SQL_LCK_EXCLUSIVE nie jest obsługiwany, zostanie zgłoszony wyjątek.

Próby aktualizacji CRecordset (migawka lub dynamiczny) spowoduje, że drugi HSTMT do przydzielenia. Dla sterowników, które nie obsługują drugą HSTMTbibliotece kursorów będzie symulować tej funkcji. Niestety mogą czasami oznacza to wymuszanie bieżącej kwerendy na pierwszym HSTMT zakończenie przed przetworzeniem drugi HSTMTna żądanie.

SQLFreeStmt SQL_CLOSE i SQL_RESET_PARAMS oraz SQLGetCursorName zostanie wywołany podczas operacji aktualizacji.

Jeśli istnieją CLongBinarys w outputColumns, ODBC firmy DATA_AT_EXEC funkcji musi być obsługiwany. Obejmuje to powrocie SQL_NEED_DATA z SQLExecDirect, SQLParamData i SQLPutData.

SQLRowCount jest wywołana po wykonaniu do sprawdzenia, że tylko 1 rekord został zaktualizowany przez SQLExecDirect.

Kursory ForwardOnly

Tylko SQLFetch jest wymagana dla operacji przenoszenia . Należy zauważyć, że kursory forwardOnly nie obsługują aktualizacji.

Migawka kursory

Migawka funkcjonalność wymaga obsługi SQLExtendedFetch . Jak wspomniano powyżej, Biblioteka kursorów ODBC będą wykryć, kiedy kierowca nie obsługuje SQLExtendedFetchi zapewnić niezbędne wsparcie w sobie.

SQLGetInfo, SQL_SCROLL_OPTIONS musi obsługiwać SQL_SO_STATIC.

Pobierany kursory

Poniżej jest minimalna obsługa wymaganych do otworzenia dynamiczny:

SQL&GetInfo, SQL_ODBC_VER musi zwracać BT; "01".

SQLGetInfo, SQL_SCROLL_OPTIONS musi obsługiwać SQL_SO_KEYSET_DRIVEN.

SQLGetInfo, SQL_ROW_UPDATES musi zwracać "Y".

SQLGetInfo, SQL_POSITIONED_UPDATES musi obsługiwać SQL_PS_POSITIONED_DELETE i SQL_PS_POSITIONED_UPDATE.

Ponadto jeśli wymagana jest pesymistycznego blokowania, wywołanie SQLSetPos irow 1, fRefresh FALSE i stada SQL_LCK_EXCLUSIVE dokonuje się.

Uwagi techniczne przez liczbę |nbsp; Uwagi techniczne według kategorii

Index