C データ型

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にしか変換できません。

このセクションには、次のトピックが含まれています。