ODBC Cデータ型は、アプリケーション内でデータを保存するために使われるCバッファのデータ型を示します。
すべてのドライバーはすべてのCデータ型をサポートしなければなりません。 これは、すべてのドライバーがすべてのC型をサポートし、そのSQL型を変換可能にし、すべてのドライバーが少なくとも1つの文字SQL型をサポートしているためです。 文字SQL型はすべてのC型に変換可能であるため、すべてのドライバーはすべてのC型をサポートしなければなりません。
C型は SQLBindCol および SQLGetData 関数で TargetType 引数で指定され、 SQLBindParameter 関数では ValueType 引数で指定されています。 また、SQLSetDescFieldを呼び出してARDやAPDのSQL_DESC_CONCISE_TYPEフィールドを設定するか、SQLSetDescRecをTYPE引数(必要に応じてSubType引数)とDescriptorHandle引数をARDまたはAPDのハンドルに設定して呼び出すことでも指定できます。
以下の表はCデータ型の有効な型識別子を一覧にしています。 また、表には各識別子に対応するODBC Cデータ型と、その定義も記載されています。
| C 型識別子 | ODBC C typedef | Cタイプ |
|---|---|---|
| SQL_C_CHAR | SQLCHAR * | 署名なしのチャー * |
| SQL_C_WCHAR | SQLWCHAR * | wchar_t * |
| SQL_C_SSHORT[j] | SQLSMALLINT | ショートインテル |
| SQL_C_USHORT[j] | SQLUSMALLINT | 署名なしのショートイント |
| SQL_C_SLONG[j] | SQLINTEGER | 長い内線 |
| SQL_C_ULONG[j] | SQLUINTEGER | 署名なしロングインテリット |
| SQL_C_FLOAT | SQLREAL | float |
| SQL_C_DOUBLE | SQLDOUBLE, SQLFLOAT | double |
| SQL_C_BIT | SQLCHAR | 署名なしのキャラクター |
| SQL_C_STINYINT[j] | SQLSCHAR | 署名 チャー |
| SQL_C_UTINYINT[j] | SQLCHAR | 署名なしのキャラクター |
| SQL_C_SBIGINT | SQLBIGINT | _int64[h] |
| SQL_C_UBIGINT | SQLUBIGINT | 署名なし_int64[h] |
| SQL_C_BINARY | SQLCHAR * | 署名なしのチャー * |
| SQL_C_BOOKMARK[i] | BOOKMARK | 署名なしロングイント[D] |
| SQL_C_VARBOOKMARK | SQLCHAR * | 署名なしのチャー * |
| すべてのC区間データ型 | SQL_INTERVAL_STRUCT | この付録の後半にある C音程構造 のセクションを参照してください。 |
C型識別子 SQL_C_TYPE_DATE[c]
ODBC C typedef SQL_DATE_STRUCT
Cタイプ
struct tagDATE_STRUCT {
SQLSMALLINT year;
SQLUSMALLINT month;
SQLUSMALLINT day;
} DATE_STRUCT;[a]
C型識別子 SQL_C_TYPE_TIME[c]
ODBC C typedef SQL_TIME_STRUCT
Cタイプ
struct tagTIME_STRUCT {
SQLUSMALLINT hour;
SQLUSMALLINT minute;
SQLUSMALLINT second;
} TIME_STRUCT;[a]
C型識別子 SQL_C_TYPE_TIMESTAMP[c]
ODBC C typedef SQL_TIMESTAMP_STRUCT
Cタイプ
struct tagTIMESTAMP_STRUCT {
SQLSMALLINT year;
SQLUSMALLINT month;
SQLUSMALLINT day;
SQLUSMALLINT hour;
SQLUSMALLINT minute;
SQLUSMALLINT second;
SQLUINTEGER fraction;[b]
} TIMESTAMP_STRUCT;[a]
C型識別子 SQL_C_NUMERIC
ODBC C typedef SQL_NUMERIC_STRUCT
Cタイプ
struct tagSQL_NUMERIC_STRUCT {
SQLCHAR precision;
SQLSCHAR scale;
SQLCHAR sign[g];
SQLCHAR val[SQL_MAX_NUMERIC_LEN];[e], [f]
} SQL_NUMERIC_STRUCT;
C型識別子 SQL_C_GUID
ODBC C typedef SQLGUID
Cタイプ
struct tagSQLGUID {
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} SQLGUID;[k]
[a] datetime Cのデータ型における年、月、日、時、分、秒のフィールドの値は、グレゴリオ暦の制約に準拠しなければなりません。 (この付録の後半にある グレゴリオ暦の制約 を参照してください。)
[b] 分数場の値は10億分の1秒の数であり、0から999,999,999(1億より小さい1)の範囲です。 例えば、0.5秒間の分数場の値は5億、千分の一秒(1ミリ秒)は1,000,000、百万分の一秒(1マイクロ秒)は1,000、10億分の1秒(1ナノ秒)は1です。
[c] ODBC 2において。x、Cの日付、時刻、タイムスタンプのデータ型はSQL_C_DATE、SQL_C_TIME、SQL_C_TIMESTAMPです。
[d] ODBC 3*.x* アプリケーションはSQL_C_BOOKMARKではなくSQL_C_VARBOOKMARKを使うべきです。 ODBC 3*.x*アプリケーションがODBC 2と連携して動作する場合、x ドライバー、ODBC 3*.x*ドライバーマネージャーがSQL_C_VARBOOKMARKをSQL_C_BOOKMARKにマッピングします。
[e] 数値は、SQL_NUMERIC_STRUCT構造の val フィールドにリトルエンディアン方式(最も左のバイトが最下位バイト)でスケーリングされた整数として格納されます。 例えば、10.001の10進底数はスケール4で、整数は100010にスケールされます。 これは16進形式の186AAなので、SQL_NUMERIC_STRUCTの値は「AA 86 01 00 00 ...SQL_MAX_NUMERIC_LEN #define で定義されたバイト数を含んで00"です。
SQL_NUMERIC_STRUCTの詳細については、HOWTO: 数値データ取得SQL_NUMERIC_STRUCTをご覧ください。
[f] SQL_C_NUMERICデータ型の精度およびスケールフィールドは、アプリケーションからの入力およびドライバーからアプリケーションへの出力に使用されます。 ドライバーがSQL_NUMERIC_STRUCTに数値を書き込むと、 精度 フィールドの値として自社のドライバー固有のデフォルトを使い、 スケール フィールドにはアプリケーションディスクリプタのSQL_DESC_SCALEフィールドの値(デフォルトは0)を使用します。 アプリケーションは、アプリケーションディスクリプタのSQL_DESC_PRECISIONフィールドとSQL_DESC_SCALEフィールドを設定することで、精度やスケールの値を自ら提供できます。
[g] 符号場は正の場合は1、負の場合は0です。
[h] _int64は一部のコンパイラから提供されていないかもしれません。
[i] _SQL_C_BOOKMARKはODBC 3*.x*で廃止されています。
[j] ODBCでは_SQL_C_SHORT、SQL_C_LONG、SQL_C_TINYINTが署名付きおよび署名なしのタイプに置き換えられています:SQL_C_SSHORTとSQL_C_USHORT、SQL_C_SLONGとSQL_C_ULONG、SQL_C_STINYINTとSQL_C_UTINYINTです。 ODBC 2と連携するはずのODBC 3*.x*ドライバーです。x アプリケーションはSQL_C_SHORT、SQL_C_LONG、SQL_C_TINYINTをサポートするべきです。なぜなら、これらが呼び出されるとドライバーマネージャーがドライバーに渡すからです。
[k] SQL_C_GUIDはSQL_CHARまたはSQL_WCHARにしか変換できません。
このセクションには、次のトピックが含まれています。