ドライバー 3.5 をドライバー 3.8 にアップグレードする

このトピックでは、ODBC 3.5 ドライバーを ODBC 3.8 ドライバーにアップグレードするためのガイドラインと考慮事項について説明します。

バージョン番号

次のガイドラインは、バージョン番号に関連しています。

  • ドライバーは、SQL_ATTR_ODBC_VERSION に対して SQL_OV_ODBC3_80 をサポートし、SQL_OV_ODBC2、SQL_OV_ODBC3、およびSQL_OV_ODBC3_80 以外の値の SQL_ERROR を返す必要があります。 ドライバー マネージャーの今後のバージョンでは、ドライバーが SQLSetEnvAttr 関数から SQL_SUCCESS を返す場合、ドライバーが ODBC コンプライアンス レベルをサポートすることを前提としています。

  • バージョン 3.8 ドライバーは、SQL_DRIVER_ODBC_VERが InfoType に渡されるときに、SQLGetInfo から 03.80 を返す必要があります。 ただし、古いバージョンの Microsoft Windows に含まれていた古いドライバー マネージャーは、ドライバーをバージョン 3.5 ドライバーとして扱い、警告を発行します。

    Windows 7 では、ドライバー マネージャーのバージョンは 03.80 です。 Windows 8 では、ドライバー マネージャーのバージョンは、SQLGetInfo SQL_DM_VER (InfoType パラメーター) を使用して 03.81 です。 SQL_ODBC_VER では、Windows 7 と Windows 8 の両方でバージョンが 03.80 として報告されます。

ドライバー固有の C データ型

ドライバーは、バージョン 3.8 ODBC アプリケーションで動作する場合に、カスタマイズされた C データ型を持つことができます。 (詳細については、「ODBC の C データ型」を参照してください。)ただし、3.8 ドライバーでドライバー固有の C の型を実装する必要はありません。 ただし、ドライバーは引き続き C の型の範囲チェックを実行する必要があります。ドライバー マネージャーは、3.8 ドライバーに対してこれを行いません。 ドライバーの開発を容易にするために、ドライバー固有の値、 C データ型を次の形式で定義できます。

SQL_DRIVER_C_TYPE_BASE+0, SQL_DRIVER_C_TYPE_BASE+1  
ドライバー固有のデータ型、記述子の種類、情報の種類、診断型、および属性

新しいドライバーを開発するときは、データ型、記述子の種類、情報の種類、診断の種類、属性にドライバー固有の範囲を使用する必要があります。 ドライバー固有の範囲とその基本データ型の値については、「ドライバー固有のデータ型、記述子の種類、情報の種類、診断の種類、属性」を参照してください。

接続プール

接続プールをより適切に管理するために、ODBC 3.8 では SQLSetConnectAttr に SQL_ATTR_RESET_CONNECTION 接続属性が導入されています。 SQL_RESET_CONNECTION_YES は、この属性の唯一の有効な値です。 SQL_ATTR_RESET_CONNECTION は、ドライバー マネージャーが接続プールに接続を配置する直前に設定され、ドライバーはその他の接続属性を既定値にリセットできます。

サーバーとの不要な通信を回避するために、ドライバーは、プールから接続が再利用された後、リモート サーバーとの次の通信まで接続属性のリセットを延期できます。

SQL_ATTR_RESET_CONNECTION は、ドライバー マネージャーとドライバーの間の通信でのみ使用されるので注意してください。 アプリケーションは、この属性を直接設定できません。 すべてのバージョン 3.8 ドライバーでは、この接続属性を実装する必要があります。

ストリーミング出力パラメーター

ODBC バージョン 3.8 では、ストリーム出力パラメーターが導入されています。これは、出力パラメーターを取得する、よりスケーラブルな方法です。 (詳細については、「SQLGetData を使用した出力パラメーターの取得」を参照してください。)この機能をサポートするには、SQL_GETDATA_EXTENSIONS が SQLGetInfo 呼び出しの InfoType である場合、ドライバーは戻り値に SQL_GD_OUTPUT_PARAMS を設定する必要があります。 ストリーム出力パラメーターを持つ SQL 型のサポートは、ドライバーに実装する必要があります。 ドライバー マネージャーは、無効な SQL 型に対して、エラーを生成しません。 ストリーム出力パラメーターをサポートする SQL 型は、ドライバーで定義されます。

アプリケーションが SQLGetData を使用して SQLParamData から返されるパラメーターと同じではないパラメーターを取得した場合、ドライバーは SQL_ERROR を返す必要があります。

接続操作の非同期実行(ポーリング メソッド)

ドライバーは、さまざまな接続操作の非同期サポートを有効にできます。

Windows 7 以降、ODBC ではポーリング メソッドがサポートされています(詳細については、「非同期実行(ポーリング メソッド)」を参照してください。 バージョン 3.8 ODBC ドライバーでは、接続ハンドルでの非同期操作を実装する必要はありません。 ドライバーが接続ハンドルに非同期操作を実装していない場合でも、ドライバーは SQL_ASYNC_DBC_FUNCTIONS InfoType を実装し、SQL_ASYNC_DBC_NOT_CAPABLE を返す必要があります。

非同期接続操作が有効になっている場合、接続操作の実行時間は、繰り返されるすべての呼び出しの合計時間です。 合計時間が SQL_ATTR_CONNECTION_TIMEOUT 接続属性で設定された値を超えた後に最後の繰り返し呼び出しが発生し、操作が完了していない場合、ドライバーは SQL_ERROR を返し、SQLState HYT01 とメッセージ 「接続タイムアウトが期限切れになりました」という診断レコードをログに記録します。 操作が完了した場合、タイムアウトはありません。

SQLCancelHandle 関数

ODBC 3.8 では SQLCancelHandle 関数がサポートされています。この関数は、接続操作とステートメント操作の両方をキャンセルするために使用されます。 SQLCancelHandle をサポートするドライバーは、関数をエクスポートする必要があります。 アプリケーションがステートメント ハンドルで SQLCancel または SQLCancelHandle を呼び出す場合、ドライバーは進行中の同期または非同期の接続関数をキャンセルしないでください。 同様に、アプリケーションが接続ハンドルで SQLCancelHandle を呼び出した場合、ドライバーは進行中の同期または非同期ステートメント関数をキャンセルしないでください。 また、アプリケーションが接続ハンドルで SQLCancelHandle を呼び出した場合、ドライバーは参照操作をキャンセルしないでください (SQLBrowseConnect は SQL_NEED_DATA を返します)。 このような場合、ドライバーは HY010 "関数シーケンス エラー" を返す必要があります。

SQLCancelHandle と非同期接続操作の両方を同時にサポートする必要はありません。 ドライバーは、非同期接続操作をサポートできますが、SQLCancelHandle はサポートできません。また、その逆も同様です。

中断された接続

ODBC 3.8 ドライバー マネージャーは、接続を中断状態にできます。 アプリケーションは SQLDisconnect を呼び出して、接続に関連付けられているリソースを解放します。 この場合、ドライバーは、接続の状態を確認せずに、できるだけ多くのリソースを解放しようとする必要があります。 中断状態の詳細については、「SQLEndTran 関数」を参照してください。

ドライバー対応接続プール

Windows 8 の ODBC を使用すると、ドライバーは接続プールの動作をカスタマイズできます。 詳細については、「ドライバー対応接続プール」に関するページを参照してください。

非同期実行 (通知方法)

ODBC 3.8 では、Windows 8 以降で使用できる非同期操作の通知メソッドがサポートされています。 詳細については、「非同期実行 (通知メソッド)」を参照してください。

参照

ODBC ドライバーの開発
Microsoft 提供の ODBC ドライバー
ODBC 3.8 の新機能