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 Interval Structure 」セクションを参照してください。 |
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] 分数フィールドの値は 1 秒間の 10 億分の 1 の数であり、0 から 999,999,999 (1 10 億未満) の範囲です。 たとえば、半秒の分数フィールドの値は 500,000,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に数値を書き込むときに、 有効桁数 フィールドの値として独自のドライバー固有の既定値を使用し、 スケール フィールドのアプリケーション記述子 (既定値は 0) のSQL_DESC_SCALE フィールドの値を使用します。 アプリケーション記述子のSQL_DESC_PRECISIONフィールドとSQL_DESC_SCALEフィールドを設定することで、アプリケーションは有効桁数と小数点以下桁数に独自の値を提供できます。
[g] 符号フィールドは正の場合は 1、負の場合は 0 です。
[h] _int64は、一部のコンパイラによって提供されない場合があります。
[i] ODBC 3*.x* では、_SQL_C_BOOKMARKは非推奨となりました。
[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にのみ変換できます。
このセクションのトピックは次のとおりです。