Aracılığıyla paylaş


TN042: odbc sürücüsü Geliştirici önerileri

Not

İlk çevrimiçi belgelerinde yer almıştır beri aşağıdaki teknik Not güncelleştirilmedi.Sonuç olarak bazı yordamlar ve konuları eski veya yanlış.En son bilgiler için çevrimiçi belgelere dizini ilgilendiğiniz konu aramak önerilir.

Bu not için odbc sürücüsü yazarlar yönergeleri açıklanır. Bu genel gereksinimler ve mfc veritabanı sınıflarını oluşturan odbc işlevleri ve çeşitli beklenen semantik Detaylar varsayımlar özetlenmektedir. Sürücü işlevleri üç desteklemek için gereken CRecordset açma modları (forwardOnly, anlık ve kesit) açıklanmıştır.

In odbc İmleç Kitaplığı

mfc veritabanı sınıflarını işlevi çoğu düzey 1 odbc sürücüleri tarafından sağlanan işlevselliği karşıladığından, çoğu durumda kullanıcı yok. Neyse ki 's odbc İmleç Kitaplığı kendi veritabanı sınıflarını ve sürücü arasında katman ve bu ek işlevlerinin çoğunu otomatik olarak sağlayacaktır.

Örneğin, çoğu 1.0 sürücüleri geri kaydırma desteklemez. İmleç Kitaplığı bunu algılayabilir ve sürücü satırları önbelleğe ve bunları fetch_prev çağrılarında üzerinde istenen şekilde sunmak SQLExtendedFetch.

Başka bir önemli imleç kitaplığı otomatikleştirmekle konumlandırılmış güncelleştirmeler örneğidir. Çoğu 1.0 sürücüleri konumlandırılmış güncelleştirmeler de gerekmez, ancak imleç kitaplığı, veri kaynağındaki geçerli önbellekteki veri değerlerini veya önbelleğe alınan zaman damgası değeri alarak hedef satırı tanımlayan update ifadeleri oluşturur.

Sınıf kitaplığı asla yapar birden çok satır kümeleri kullanın. Bu nedenle, birkaç SQLSetPos ifadeleri 1 satır, satırdaki her zaman olarak uygulanır.

CDatabases

Her CDatabase ayıran tek bir hdbc. (, CDatabase'S ExecuteSQL işlevi kullanıldığında, bir hstmt geçici olarak tahsis edilir.) Böylece, birden çok CDatabase's, birden çok gerekli olan hdbcbaşına s henv desteklenmelidir.

Veritabanı sınıflarını imleç kitaplığı gerektirir. Bu yansıtılan bir SQLSetConnections call sql_odbc_cursors, sql_cur_use_odbc.

SQLDriverConnect, SQL_DRIVER_COMPLETE tarafından kullanılan CDatabase::Open veri kaynağına bağlantı kurmak için.

Sürücü desteklemelidir SQLGetInfoSQL_ODBC_API_CONFORMANCE > = SQL_OAC_LEVEL1, SQLGetInfosql_odbc_sql_conformance > = SQL_OSC_MINIMUM.

Hareketleri için desteklenmesi sırayla CDatabase ve onun bağımlı kayıt kümesi SQLGetInfoSQL_CURSOR_COMMIT_BEHAVIOR ve SQL_CURSOR_ROLLBACK_BEHAVIOR olmalıdır sql_cr_preserve. Aksi takdirde, hareket denetimi gerçekleştirmek için girişimleri yoksayılacak.

SQLGetInfosql_data_source_read_only desteklenmelidir. "y" döndürürse, veri kaynağı üzerinde hiçbir güncelleştirme işlemleri gerçekleştirilir.

CDatabase Açıldığında salt okunur, okunan veri kaynağı ayarlama girişimi yalnızca oluşturulacak olan SQLSetConnectOptionsql_access_mode, sql_mode_read_only.

Tanımlayıcıları tırnak içine almak istiyorsanız, bu bilgileri ile sürücüsünden döndürülmesi gereken bir SQLGetInfoSQL_IDENTIFIER_QUOTE_CHAR çağırın.

Hata ayıklama amacıyla, SQLGetInfo sql_dbms_ver ve sql_dbms_name sürücüsünden alınır.

SQLSetStmtOptionSQL_QUERY_TIMEOUT ve sql_async_enable üzerinde çağrılabilir bir CDatabase's hdbc.

SQLError ya da tüm değişken null ile denir.

Kuşkusuz, SQLAllocEnv, SQLAllocConnect, SQLDisconnect ve SQLFreeConnect desteklenmelidir.

ExecuteSQL

Ayırma ve geçici boşaltma yanında hstmt, ExecuteSQL çağrıları SQLExecDirect, SQLFetch, SQLNumResultCol ve SQLMoreResults. SQLCancel üzerinde çağrılabilir hstmt.

GetDatabaseName

SQLGetInfosql_database_name olarak adlandırılır.

BeginTrans, CommitTrans, geri alma

SQLSetConnectOptionSQL_AUTOCOMMIT ve SQLTransactSQL_COMMIT, sql_rollback ve SQL_AUTOCOMMIT işlem isteği yaptıysanız çağrılacak.

CRecordsets

SQLAllocStmt, SQLPrepare, SQLExecute (için açık ve Requery), SQLExecDirect (güncelletirme ilemlerinde), SQLFreeStmt desteklenmelidir. SQLNumResultCols ve SQLDescribeCol çeşitli zaman ayarlı sonuçları verilir.

SQLSetParam Java'da parametre veri bağlama için kullanılır ve data_at_exec işlevi.

SQLBindCol kapsamlı biçimde kaydetmek için kullanılan sütun veri depolama konumları odbc ile çıktı.

İki SQLGetData çağrı almak için kullanılan sql_long_varchar ve SQL_LONG_VARBINARY veri. Sütun değeri toplam uzunluğu arayarak bulmak ilk çağrı çalışır SQLGetData 0 cbMaxValue ancak geçerli pcbValue. PcbValue tutuyorsa, sql_no_total, bir özel durum. Aksi halde, bir HGLOBAL tahsis edilir ve başka bir SQLGetData tüm sonuç almak için yapılan bir çağrı.

Güncelleştiriliyor

Kötümser kilitleme istenirse, SQLGetInfosql_lock_types Sorgulanacak. SQL_LCK_EXCLUSIVE olan desteklenmiyor, bir özel durum.

Güncelleştirme girişiminde bir CRecordset (anında veya kesit) ikinci bir neden hstmt tahsis edilecek. Desteklemeyen sürücüler için ikinci hstmt, imleç kitaplığı bu işlevselliği benzetimini yapacak. Ne yazık ki bu bazen geçerli sorguyu ilk zorlama gelebilir hstmt ikinci işleme önce tamamlanması için hstmt's request.

SQLFreeStmtsql_close ve sql_reset_params ve SQLGetCursorName güncelleştirme işlemleri sırasında denir.

Varsa CLongBinarys , outputColumns, ODBC's data_at_exec işlevselliği bulundurulmalıdır. Bu dönme içerir sql_need_data dan SQLExecDirect, SQLParamData ve SQLPutData.

SQLRowCount sadece 1 kayıt tarafından güncelleştirildi doğrulamak için yürüttükten sonra adlı SQLExecDirect.

ForwardOnly İmleçler

Yalnızca SQLFetch için gerekli olan hareket işlemleri. Dikkat forwardOnly güncelleştirmeleri imleçleri desteklemez.

Anlık görüntü İmleçler

Anlık görüntü işlevselliği gerektiren SQLExtendedFetch destekler. Bir sürücü desteklemediği, yukarıda belirtildiği gibi odbc İmleç Kitaplığı algılamak SQLExtendedFetchve gerekli desteği sağlar.

SQLGetInfo, SQL_SCROLL_OPTIONS desteklemesi gerekir SQL_SO_STATIC.

Dinamik İmleçler

Dinamik küme açmak için gereken en düşük destek aşağıda verilmiştir:

SQLGetInfo, sql_odbc_ver döndürmelidir > "01".

SQLGetInfo, SQL_SCROLL_OPTIONS desteklemesi gerekir SQL_SO_KEYSET_DRIVEN.

SQLGetInfo, sql_row_updates "y" döndürmelidir.

SQLGetInfo, SQL_POSITIONED_UPDATES desteklemesi gerekir SQL_PS_POSITIONED_DELETE ve SQL_PS_POSITIONED_UPDATE.

Kötümser kilitleme isteniyorsa, buna ek olarak, çağrı SQLSetPos Irow 1, yanlış fRefresh ve fLock SQL_LCK_EXCLUSIVE hale getirilebilir.

Ayrıca bkz.

Diğer Kaynaklar

Teknik notlar numarasına göre

Kategoriye göre teknik notlar