アプリケーションの ODBC バージョンの宣言

アプリケーションは、接続を割り当てる前に、SQL_ATTR_ODBC_VERSION環境属性を設定する必要があります。 この属性は、次の項目を使用する場合、アプリケーションが ODBC 2.x または ODBC 3.x の仕様に従っていることを示します。

  • SQLSTATEs。 ODBC 2.x と ODBC 3.x では、多くの SQLSTATE 値が異なります。

  • 日付、時刻、およびタイムスタンプ型識別子。 次のテーブルは、ODBC 2.x および ODBC 3.x の日付、時刻、およびタイムスタンプ データの型識別子を示しています。

    ODBC 2.x ODBC 3.x
    SQL の型識別子
    SQL_DATE SQL_TYPE_DATE
    SQL_TIME SQL_TYPE_TIME
    SQL_TIMESTAMP SQL_TYPE_TIMESTAMP
    C 型識別子
    SQL_C_DATE SQL_C_TYPE_DATE
    SQL_C_TIME SQL_C_TYPE_TIME
    SQL_C_TIMESTAMP SQL_C_TYPE_TIMESTAMP
  • CatalogNameArguments in SQLTables。 ODBC 2.x では、CatalogName 引数のワイルドカード文字 ("%" と "_") は文字どおり扱われます。 ODBC 3.x では、これらはワイルドカード文字として扱われます。 したがって、ODBC 2.x 仕様に従うアプリケーションでは、これらをワイルドカード文字として使用することはできず、リテラルとして使用する場合はエスケープされません。 ODBC 3.x 仕様に従うアプリケーションでは、これらをワイルドカード文字として使用することも、エスケープしてリテラルとして使用することもできます。 詳細については、「カタログ関数の引数」を参照してください。

ODBC 3.x ドライバー マネージャーと ODBC 3.x ドライバーは、アプリケーションが書き込まれる ODBC 仕様のバージョンを確認し、それに応じて応答します。 たとえば、アプリケーションが ODBC 2.x 仕様に従い、SQLPrepare を呼び出す前に SQLExecute を呼び出した場合、ODBC 3.x ドライバー マネージャーは SQLSTATE S1010 (関数シーケンス エラー) を返します。 アプリケーションが ODBC 3.x 仕様に従う場合、ドライバー マネージャーは SQLSTATE HY010 (関数シーケンス エラー) を返します。 詳細については、「下位互換性と標準のコンプライアンス」を参照してください

重要

ODBC 3.x 仕様に従うアプリケーションでは、ODBC 2.x ドライバーを使用する際に ODBC 3.x の新機能を使用しないように、条件付きコードを使用する必要があります。 ODBC 2.x ドライバーでは、ODBC 3.x 仕様に従うことをアプリケーションが宣言しているため、ODBC 3.x の新機能はサポートされていません。 さらに、ODBC 3.x ドライバーは、アプリケーションが ODBC 2.x 仕様に従うことを宣言しているからといって、ODBC 3.x の新機能のサポートを停止しません。