C データ型

ODBC C データ型は、アプリケーションにデータを格納するために使用される C バッファーのデータ型を示します。

すべてのドライバーは、すべての C データ型をサポートする必要があります。 これは、すべてのドライバーがサポートするSQL型を変換できるすべての C 型をサポートする必要があり、すべてのドライバーが少なくとも 1 つの文字SQL型をサポートしているために必要です。 文字SQL型は、すべての C 型との間で変換できるため、すべてのドライバーですべての C 型をサポートする必要があります。

C データ型は、TargetType 引数を持つ SQLBindCol 関数と SQLGetData 関数、および ValueType 引数を持つ SQLBindParameter 関数で指定されます。 また、SQLSetDescField を呼び出して ARD または APD のSQL_DESC_CONCISE_TYPE フィールドを設定するか、Type 引数 (および必要に応じて SubType 引数) と DescriptorHandle 引数を ARD または APD のハンドルに設定して SQLSetDescRec を呼び出すことによって指定することもできます。

次の表に、C データ型の有効な型識別子を示します。 この表には、各識別子に対応する ODBC C データ型と、このデータ型の定義も一覧表示されます。

C 型識別子 ODBC C typedef C 型
SQL_C_CHAR SQLCHAR * unsigned char *
SQL_C_WCHAR SQLWCHAR * wchar_t *
SQL_C_SSHORT[j] SQLSMALLINT short int
SQL_C_USHORT[j] SQLUSMALLINT unsigned short int
SQL_C_SLONG[j] SQLINTEGER long int
SQL_C_ULONG[j] SQLUINTEGER unsigned long int
SQL_C_FLOAT SQLREAL float
SQL_C_DOUBLE SQLDOUBLE、SQLFLOAT double
SQL_C_BIT SQLCHAR unsigned char
SQL_C_STINYINT[j] SQLSCHAR signed char
SQL_C_UTINYINT[j] SQLCHAR unsigned char
SQL_C_SBIGINT SQLBIGINT _int64[h]
SQL_C_UBIGINT SQLUBIGINT unsigned _int64[h]
SQL_C_BINARY SQLCHAR * unsigned char *
SQL_C_BOOKMARK[i] ブックマーク unsigned long int[d]
SQL_C_VARBOOKMARK SQLCHAR * unsigned char *
すべての 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 データ型の年、月、日、時、分、および 2 番目のフィールドの値は、グレゴリオ暦の制約に準拠している必要があります。 (この付録 で後述するグレゴリオ暦の制約 を参照してください)。

[b] 分数フィールドの値は秒の 10 億分の 1 の数であり、0 から 999,999,999 (1 10 億未満) の範囲です。 たとえば、半秒の分数フィールドの値は 500,000,000、1000 分の 1 秒 (1 ミリ秒) は 1,000,000、100 万分の 1 秒 (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 base 10 は 4 の小数点以下桁数で、100010 の整数にスケーリングされます。 これは 16 進数形式の 186AA であるため、SQL_NUMERIC_STRUCTの値は "AA 86 01 00 00 ...00"。SQL_MAX_NUMERIC_LEN #defineによって定義されたバイト数。

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] ODBC 3*.x* では、_SQL_C_BOOKMARKは非推奨となりました。

[j] _SQL_C_SHORT、SQL_C_LONG、およびSQL_C_TINYINTは、ODBC で符号付き型と符号なし型 (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にのみ変換できます。

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

参照

ODBC の C データ型