次の方法で共有


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

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

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

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

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

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

SQLBindCol または SQLGetData の TargetType 引数に、特定の 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 終端文字のスペースは含まれません。

  • 文字バイト長 は、データを文字形式で表示するために必要な合計バイト数です。 これは、セクション Display Size の各 C データ型に対して定義されています。ただし、表示サイズが文字単位である間、文字バイト長がバイト単位であることを除きます。

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

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