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にのみ変換できます。
このセクションには、次のトピックが含まれています。