SQL から C データ型へのデータ変換

アプリケーションが SQLFetch、SQLFetchScrollまたは SQLGetData を呼び出すと、ドライバーはデータ ソースからデータを取得します。 必要に応じて、ドライバーが取得したデータ型のデータを、SQLBindCol または SQLGetData の TargetType 引数で指定されたデータ型に変換します。最後に、SQLBindCol または SQLGetData の TargetValuePtr 引数が指す場所 (および ARD の SQL_DESC_DATA_PTR フィールド) にデータを格納します。

次の表は、ODBC SQL データ型から ODBC C データ型へのサポートされている変換を示しています。 塗りつぶされた円は、SQL データ型 (TargetType の値がSQL_C_DEFAULTされたときにデータが変換される C データ型) の既定の変換を示します。 空の円は、サポートされている変換を示します。

ODBC 2.x ドライバーを使用する ODBC 3.x アプリケーションでは、ドライバー固有のデータ型からの変換がサポートされていない可能性があります。

変換されたデータの形式は、Windows の国/地域設定の影響を受けません。

次のセクションの表では、ドライバーまたはデータ ソースがデータ ソースから取得したデータを変換する方法について説明します。ドライバーは、サポートされている ODBC SQL データ型からすべての ODBC C データ型への変換をサポートするために必要です。 特定の ODBC SQL データ型の場合、テーブルの最初の列には、SQLBindCol および SQLGetData の TargetType 引数の有効な入力値が一覧表示されます。 2 番目の列には、テストの結果が一覧表示されます。多くの場合、SQLBindCol または SQLGetData指定された BufferLength 引数を使用します。この引数は、ドライバーがデータを変換できるかどうかを判断するために実行されます。 結果ごとに、3 番目と 4 番目の列には、TargetValuePtr で指定されたバッファーに配置された値と、ドライバーがデータの変換を試みた後に SQLBindCol または SQLGetData指定されたStrLen_or_IndPtr引数が一覧表示されます。 (〘 StrLen_or_IndPtr引数は、ARD のSQL_DESC_OCTET_LENGTH_PTRフィールドに対応します。最後の列には、SQLFetch、SQLFetchScrollまたは SQLGetData によって結果ごとに返される SQLSTATE が一覧表示されます。

SQLBindCol または SQLGetDataTargetType 引数に、特定の ODBC SQL データ型のテーブルに表示されない ODBC C データ型の識別子が含まれている場合、SQLFetchSQLFetchScroll、または SQLGetData は SQLSTATE 07006 (制限付きデータ型属性違反) を返します。 TargetType 引数に、ドライバー固有の SQL データ型から ODBC C データ型への変換を指定する識別子が含まれており、この変換がドライバー、SQLFetchSQLFetchScrollまたは SQLGetData によってサポートされていない場合は、SQLSTATE HYC00 が返されます (省略可能な機能は実装されていません)。

テーブルには表示されませんが、SQL データ値が NULL の場合、ドライバーは StrLen_or_IndPtr 引数で 指定されたバッファー内のSQL_NULL_DATA を返します。 データを取得するために複数の呼び出しが行われる場合のStrLen_or_IndPtr使用方法については、SQLGetData 関数の説明を参照してください。 SQL データを文字 C データに変換する場合、*StrLen_or_IndPtr で返される文字数には null 終端バイトは含まれません。 TargetValuePtr が null ポインターの場合SQLGetData は SQLSTATE HY009 (null ポインターの使用が無効です) を返します。SQLBindCol では、列のバインドを解除します。

表では、次の用語と規則が使用されています。

  • データ のバイト長は、データがアプリケーションに返される前に切り捨てられるかどうかに関係なく、*TargetValuePtr で返すことができる C データのバイト数です。 文字列データの場合、null 終端文字のスペースは含まれません。

  • 文字バイト長 は、データを文字形式で表示するために必要な合計バイト数です。 これは、「表示サイズ」セクション の C データ・タイプごとに定義されています。ただし、表示サイズが文字単位である間、文字バイト長がバイト単位である点が異なります。

  • 斜体の 単語は、 SQL 文法の関数引数または要素を表します。 文法要素の構文については、「付録 C: SQL 文法」を参照してください

このセクションでは、次のトピックを扱います。