データ バッファーの種類
バッファーの C データ型は、アプリケーションによって指定されます。 1 つの変数を使用すると、アプリケーションが変数を割り当てるときに発生します。 ジェネリック メモリ (つまり、void 型のポインターによって指されるメモリ) では、これは、アプリケーションがメモリを特定の型にキャストするときに発生します。 ドライバーは、次の 2 つの方法でこの種類を検出します。
データ バッファー型引数。 パラメーター値と結果セット データを転送するために使用されるバッファー (SQLBindCol の TargetValuePtr でバインドされたバッファーなど) には、通常、SQLBindCol の TargetType 引数などの型引数が関連付けられています。 この引数では、アプリケーションはバッファーの型に対応する C 型識別子を渡します。 たとえば、次の SQLBindCol の呼び出しでは、値 SQL_C_TYPE_DATE は、日付バッファーが SQL_DATE_STRUCT であることをドライバーに通知します。
SQL_DATE_STRUCT Date; SQLINTEGER DateInd; SQLBindCol(hstmt, 1, SQL_C_TYPE_DATE, &Date, 0, &DateInd);
型識別子の詳細については、このセクションで後述する「ODBC のデータ型」セクションを参照してください。
定義済みの型。 オプションまたは属性の送受信に使用されるバッファー (SQLGetInfo の InfoValuePtr 引数が指すバッファーなど) には、指定されたオプションに依存する固定型があります。 ドライバーは、データ バッファーがこの型であることを前提としています。この型のバッファーを割り当てるのはアプリケーションの責任です。 たとえば、次の SQLGetInfo の呼び出しでは、ドライバーはバッファーが 32 ビット整数であると見なします。これは、SQL_STRING_FUNCTIONS オプションに必要なものであるためです。
SQLUINTEGER StringFuncs; SQLGetInfo(hdbc, SQL_STRING_FUNCTIONS, (SQLPOINTER) &StringFuncs, 0, NULL);
ドライバーは、バッファー内のデータを解釈するために C データ型を使用します。