ODBC 3.x Uygulamaları Yazma

ODBC 2.x uygulaması ODBC 3.x'e yükseltildiğinde, hem ODBC 2.x hem de 3.x sürücüleriyle çalışacak şekilde yazılmalıdır. Uygulama, ODBC 3.x özelliklerinden tam olarak yararlanmak için koşullu kod içermelidir.

SQL_ATTR_ODBC_VERSION ortam özniteliği SQL_OV_ODBC2 olarak ayarlanmalıdır. Bu, sürücünün DavranışSal Değişiklikler bölümünde açıklanan değişikliklerle ilgili olarak ODBC 2.x sürücüsü gibi davranmasını sağlar.

Uygulama Yeni Özellikler bölümünde açıklanan özelliklerden herhangi birini kullanacaksa, sürücünün ODBC 3.x veya ODBC 2.x sürücüsü olup olmadığını belirlemek için koşullu kod kullanılmalıdır. Uygulama, bu koşullu kod parçaları üzerinde hata işleme yaparken ODBC 3.x SQLSTATEs elde etmek için SQLGetDiagField ve SQLGetDiagRec kullanır. Yeni işlevsellikle ilgili aşağıdaki noktalar dikkate alınmalıdır:

  • Satır kümesi boyutundaki değişiklikten etkilenen bir uygulama, dizi boyutu 1'den büyük olduğunda SQLFetch'i çağırmamaya dikkat edilmelidir. Bu uygulamalar, hem ODBC 3.x hem de ODBC 2.x sürücüleriyle çalışan ortak kodlara sahip olmaları için SQLExtendedFetch çağrılarını SQLSetStmtAttr çağrılarıyla değiştirerek SQL_ATTR_ARRAY_STATUS_PTR deyimi özniteliğini ve SQLFetchScroll'ı ayarlamalıdır. SQL_ATTR_ROW_ARRAY_SIZE ile SQLSetStmtAttr, ODBC 2.x sürücüleri için SQL_ROWSET_SIZE ile SQLSetStmtAttr olarak eşleneceğinden, uygulamalar yalnızca çok satırlı getirme işlemleri için SQL_ATTR_ROW_ARRAY_SIZE ayarlayabilir.

  • Yükselten uygulamaların çoğu SQLSTATE kodlarındaki değişikliklerden gerçekten etkilenmez. Etkilenen uygulamalar için, ODBC 3.x hata kodlarını ODBC 2.x kodlarına dönüştürmek için "SQLSTATE Eşlemesi" bölümündeki hata dönüştürme tablosunu kullanarak çoğu durumda mekanik bir arama yapabilir ve değiştirebilirler. ODBC 3.x Sürücü Yöneticisi ODBC 2.x SQLSTATEs'ten ODBC 3.x SQLSTATEs'e eşleme gerçekleştireceğinden, bu uygulama yazıcılarının yalnızca ODBC 3.x SQLSTATEs'i denetlemesi ve koşullu koda ODBC 2.x SQLSTATEs ekleme konusunda endişelenmesi gerekmez.

  • Bir uygulama tarih, saat ve zaman damgası veri türlerini çok iyi kullanıyorsa, uygulama kendisini bir ODBC 2.x uygulaması olarak bildirebilir ve koşullama kodu kullanmak yerine mevcut kodunu kullanabilir.

Yükseltme aşağıdaki adımları da içermelidir:

  • SQL_ATTR_ODBC_VERSION ortam özniteliğini SQL_OV_ODBC2 olarak ayarlamak için bir bağlantı ayırmadan önce SQLSetEnvAttr'i çağırın.

  • SQLAllocEnv, SQLAllocConnect veya SQLAllocStmt çağrılarının tümünü SQLAllocHandle çağrılarıyla SQL_HANDLE_ENV, SQL_HANDLE_DBC veya SQL_HANDLE_STMT uygun HandleType bağımsız değişkeniyle değiştirin.

  • SQLFreeEnv veya SQLFreeConnect'e yapılan tüm çağrıları SQLFreeHandle çağrılarıyla SQL_HANDLE_DBC veya SQL_HANDLE_STMT uygun HandleType bağımsız değişkeniyle değiştirin.

  • SQLSetConnectOption'a yapılan tüm çağrıları SQLSetConnectAttr çağrılarıyla değiştirin. Değeri bir dize olan bir öznitellik ayarlanacaksa, StringLength bağımsız değişkenini uygun şekilde ayarlayın. Öznitelik bağımsız değişkenini SQL_XXXX'ten SQL_ATTR_XXXX'e değiştirin.

  • SQLGetConnectOption'a yapılan tüm çağrıları SQLGetConnectAttr çağrılarıyla değiştirin. Dize veya ikili öznitelik alıyorsanız BufferLength değerini uygun değere ayarlayın, ve StringLength bağımsız değişkenini geçirin. Öznitelik bağımsız değişkenini SQL_XXXX'den SQL_ATTR_XXXX'e değiştirin.

  • TÜM SQLSetStmtOption çağrılarını SQLSetStmtAttr çağrılarıyla değiştirin. Değeri bir dize olan bir öznitelik ayarlanıyorsa, StringLength bağımsız değişkenini uygun şekilde ayarlayın. Öznitelik bağımsız değişkenini SQL_XXXX'ten SQL_ATTR_XXXX'e değiştirin.

  • TÜM SQLGetStmtOption çağrılarını SQLGetStmtAttr çağrılarıyla değiştirin. Dize veya ikili öznitelik alıyorsanız BufferLength değerini uygun değere ayarlayın ve stringLength bağımsız değişkenini geçirin. Öznitelik argümanını SQL_XXXX'den SQL_ATTR_XXXX'e değiştirin.

  • SQLTransact'e yapılan tüm çağrıları SQLEndTran çağrılarıyla değiştirin. SQLTransact çağrısındaki en sağdaki geçerli tanıtıcı bir ortam tanıtıcısıysa, SQLEndTran çağrısında uygun Handle bağımsız değişkeniyle SQL_HANDLE_ENV HandleType bağımsız değişkeni kullanılmalıdır. SQLTransact çağrınızdaki en sağdaki geçerli tanıtıcı bir bağlantı tanıtıcısıysa, SQLEndTran çağrısında uygun Handle bağımsız değişkeniyle SQL_HANDLE_DBC HandleType bağımsız değişkeni kullanılmalıdır.

  • TÜM SQLColAttributes çağrılarınıSQLColAttribute çağrılarıyla değiştirin. FieldIdentifier bağımsız değişkeni SQL_COLUMN_PRECISION, SQL_COLUMN_SCALE veya SQL_COLUMN_LENGTH ise işlevin adı dışında hiçbir şeyi değiştirmeyin. Aksi takdirde FieldIdentifier öğesini SQL_COLUMN_XXXX'den SQL_DESC_XXXX'e değiştirin. FieldIdentifier SQL_DESC_CONCISE_TYPE ve veri türü bir tarih saat veri türüyse, ilgili ODBC 3.x veri türüne geçin.

  • Blok imleçleri, kaydırılabilir imleçler veya her ikisini birden kullanıyorsanız, uygulama aşağıdakileri yapar:

    • SQLSetStmtAttr kullanarak satır kümesi boyutunu, imleç türünü ve imleç eşzamanlılığını ayarlar.

    • SQLSetStmtAttr'i çağırarak SQL_ATTR_ROW_STATUS_PTR'yi bir durum kayıtları dizisine işaret edecek şekilde ayarlar.

    • SQL_ATTR_ROWS_FETCHED_PTR'nin bir SQLINTEGER'e işaret etmesi için SQLSetStmtAttr'ı çağırır.

    • Gerekli bağlamaları gerçekleştirir ve SQL deyimini yürütür.

    • Satırları getirmek ve sonuç kümesinde gezinmek için bir döngüde SQLFetchScroll'ı çağırır.

    • Eğer yer işaretiyle veri almak isterse, uygulama istediği satırın yer işaretini içerecek bir değişkene SQL_ATTR_FETCH_BOOKMARK_PTR ayarlamak için SQLSetStmtAttr'ı çağırır ve SQLFetchScroll'ı SQL_FETCH_BOOKMARK FetchOrientation bağımsız değişkeniyle kullanarak çağırır.

  • Parametre dizilerini kullanıyorsanız, uygulama aşağıdakileri yapar:

    • SQL_ATTR_PARAMSET_SIZE özniteliğini parametre dizisinin boyutuna ayarlamak için SQLSetStmtAttr'yi çağırır.

    • SQLSetStmtAttr'ı, SQL_ATTR_ROWS_PROCESSED_PTR'yi bir iç UDWORD değişkenini işaret edecek şekilde ayarlamak için çağırır.

    • Hazırlama, bağlama ve yürütme işlemlerini uygun şekilde gerçekleştirir.

    • Yürütme bir nedenle (örneğin SQL_NEED_DATA) durursa, SQL_ATTR_ROWS_PROCESSED_PTR tarafından işaret edilen konumu inceleyerek parametrelerin "geçerli" satırını bulabilir.

Bu bölüm aşağıdaki konuları içerir.