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

アプリケーションが SQLExecute または SQLExecDirect を呼び出すと、ドライバーは、アプリケーション内のストレージの場所から SQLBindParameterバインドされているパラメーターのデータを取得します。 アプリケーションが SQLSetPos を呼び出すと、ドライバーは更新のデータを取得するか、SQLBindCol でバインドされた列から操作を追加します。 実行時データ パラメーターの場合、アプリケーションは SQLPutData を使用してパラメーター データを 送信します。 必要に応じて、ドライバーは、SQLBindParameter の ValueType 引数で指定されたデータ型から SQLBindParameter の ParameterType 引数で指定されたデータ型にデータを変換し、データ ソースにデータを送信します。

次の表は、ODBC C データ型から ODBC SQL データ型へのサポートされている変換を示しています。 塗りつぶされた円は、SQL データ型の既定の変換 (ValueType または SQL_DESC_CONCI Standard Edition_TYPE 記述子フィールドの値がSQL_C_DEFAULTされたときにデータの変換元となる C データ型) を示します。 空の円は、サポートされている変換を示します。

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

Supported conversions: ODBC C to SQL data types

次のセクションの表では、ドライバーまたはデータ ソースがデータ ソースに送信されたデータを変換する方法について説明します。ドライバーは、すべての ODBC C データ型からサポートされている ODBC SQL データ型への変換をサポートするために必要です。 特定の ODBC C データ型の場合、テーブルの最初の列には、SQLBindParameter の ParameterType 引数の有効な入力値が一覧表示されます。 2 番目の列には、ドライバーがデータを変換できるかどうかを判断するために実行されるテストの結果が一覧表示されます。 3 番目の列には、SQLExecDirect、SQLExecute、SQLBulkOperationsSQLSetPosまたは SQLPutData によって結果ごとに返される SQLSTATE が一覧表示されます。 データは、SQL_SUCCESSが返された場合にのみデータ ソースに送信されます。

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

SQLBindParameter指定された ParameterValuePtr 引数とStrLen_or_IndPtr引数が両方とも null ポインターである場合、その関数は SQLSTATE HY009 を返します (null ポインターの使用は無効です)。 テーブルには表示されませんが、アプリケーションは、SQLBindParameter のStrLen_or_IndPtr引数によって指される長さ/インジケーター バッファーの値、または SQLPutData のStrLen_or_IndPtr引数の値を、NULL SQL データ値を指定するためにSQL_NULL_DATAに設定します。 (〘 StrLen_or_IndPtr引数は、APD のSQL_DESC_OCTET_LENGTH_PTR フィールドに対応します。アプリケーションは、これらの値を SQL_NTS に設定して、SQLBindParameter の *ParameterValuePtr または SQLPutData の *DataPtr(APD の SQL_DESC_DATA_PTR フィールドが指す) の値が null で終わる文字列であることを指定します。

表では、次の用語を使用します。

  • データのバイト長 - データ ソースに送信できる SQL データのバイト数。データがデータ ソースに送信される前に切り捨てられるかどうか。 文字列データの場合、null 終端文字のスペースは含まれません。

  • 列のバイト長 - データ ソースにデータを格納するために必要なバイト数。

  • 文字バイト長 - 文字形式でデータを表示するために必要な最大バイト数。 これは、表示サイズSQL データ型ごとに定義されているとおりです。ただし、文字バイト長はバイト単位ですが、表示サイズは文字単位です。

  • 桁数 - 負符号、小数点、指数 (必要な場合) を含む、数値を表すために使用される文字数。

  • 単語の入力
    斜体 - SQL 文法の要素。 文法要素の構文については、「付録 C: SQL 文法」を参照してください

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