ODBC の C データ型
ODBC は、アプリケーション変数とそれに対応する型識別子によって使用される C データ型を定義します。 これらは、結果セットの列とステートメント パラメーターにバインドされているバッファーによって使用されます。 たとえば、アプリケーションが結果セット列から文字形式でデータを取得するとします。 SQLCHAR * データ型の変数を宣言し、SQL_C_CHARの型識別子を持つ結果セット列にこの変数をバインドします。 C データ型と型識別子の完全な一覧については、「付録 D: データ型」を参照してください。
ODBC では、各 SQL データ型から C データ型への既定のマッピングも定義されています。 たとえば、データ ソースの 2 バイト整数は、アプリケーションの 2 バイト整数にマップされます。 既定のマッピングを使用するために、アプリケーションは SQL_C_DEFAULT 型識別子を指定します。 ただし、相互運用性の理由から、この識別子を使用することはお勧めしません。
ODBC 1.x で定義されているすべての整数 C データ型は符号付きでした。 ODBC 2.0 では、符号なし C データ型とそれに対応する型識別子が追加されました。 このため、アプリケーションとドライバーは、1.x バージョンを扱うときに特に注意する必要があります。
C データ型の機能拡張。
ODBC 3.8 では、ドライバー固有の C データ型を指定できます。 これにより、SQLBindCol、SQLGetData、または SQLBindParameter を呼び出すときに、ODBC アプリケーションで SQL 型をドライバー固有の C 型としてバインドできます。 これは、既存の C データ型が新しいサーバー データ型を正しく表さない可能性があるため、新しいサーバーの種類をサポートする場合に役立ちます。 ドライバー固有の C 型を使用すると、ドライバーが実行できる変換の数を増やすことができます。
たとえば、データベース管理システム (DBMS) で、タイム ゾーン情報を含む日付と時刻を表す新しい SQL 型 DATETIMEOFFSET が導入されたとします。 ODBC には、DATETIMEOFFSET に対応する特定の C 型はありません。 アプリケーションでは、DATETIMEOFFSET をSQL_C_BINARYとしてバインドし、ユーザー定義データ型にキャストする必要があります。 ODBC 3.8 以降では、C データ型の拡張により、ドライバーは新しい対応する C 型を定義できます。 たとえば、新しい SQL 型 DATETIMEOFFSET の場合、ドライバーは、SQL_C_DATETIMEOFFSETなどの新しい対応する C 型を定義できます。 その後、アプリケーションは新しい SQL 型をドライバー固有の C 型としてバインドできます。
C データ型は、ドライバーで次のように定義されます。
アプリケーション、ODBC ドライバー、およびドライバー マネージャーの ODBC コンプライアンス レベルは 3.8 (またはそれ以上) です。
ドライバー固有の C 型のデータ範囲は、0x4000と0x7FFFの間にあります。
ドライバーは、C 型に対応するデータの構造を定義します。 これは、ドライバー固有の SDK で実行できます。
ドライバー マネージャーは、0x4000と0x7FFFの範囲で定義されている C 型を検証しません。ドライバーは検証と任意のデータ型変換を実行します。 ただし、ドライバー マネージャーに渡される C 型のデータ範囲が0x0000と0x3FFFの間、または0x8000と0xFFFFの間にある場合、ドライバー マネージャーは C データ型を検証します。
Note
ドライバー固有の C データ型については、ドライバーのドキュメントで説明する必要があります。
ODBC 準拠レベル 3.8 を指定するために、アプリケーションは、SQL_ATTR_ODBC_VERSION属性を SQL_OV_ODBC3_80 に設定して SQLSetEnvAttr を呼び出します。 ドライバーのバージョンを確認するために、アプリケーションはSQL_DRIVER_ODBC_VERを使用して SQLGetInfo を呼び出します。
ODBC 3.8 詳細については、「ODBC 3.8の新機能」を参照してください。