CLI の手引きおよび解説書

SQL から C データ・タイプへのデータ変換

指定の SQL データ・タイプについて、次の内容がリストされています。

表では、指定の SQL データ・タイプにとって有効になるよう ODBC で定義された変換をリストします。

SQLBindCol() または SQLGetData()fCType 引き数に、所定の SQL データ・タイプについて表にない値が含まれていると、 SQLFetch() または SQLGetData() は、 SQLSTATE 07006 (データ・タイプ属性制約違反) を戻します。

fCType 引き数に、表にはあっても、ドライバーでサポートされていない変換を指定する値が含まれていると、 SQLFetch() または SQLGetData() は、 SQLSTATE HYC00 (ドライバー不可) を戻します。

表には示されていませんが、pcbValue 引き数には、 SQL データ値が NULL のときの SQL_NULL_DATA が含まれます。データを取り出す場合に複数呼び出しが行われる際の pcbValue の使用法に関する説明は、 SQLGetData() を参照してください。

SQL データが文字 C データに変換される際に、 pcbValue に戻される文字カウントにはヌル終了バイトは含まれません。 rgbValue が NULL ポインターの場合、 SQLBindCol() または SQLGetData() は、 SQLSTATE HY009 (無効な引き数値) を戻します。

表では、次の用語が使われています。

データの長さ
指定の C データ・タイプに変換された後のデータの全長 (データがストリングに変換された場合のヌル終了バイトを除く) 。これは、アプリケーションに戻される前にデータが切り捨てられる場合にも当てはまります。

有効桁
負符号 (必要な場合) および小数点の左の桁。

表示サイズ
文字形式でデータを表示するのに必要なバイトの合計数。

文字 SQL データから C データへの変換

文字 SQL データ・タイプは次のとおりです。

SQL_CHAR
SQL_VARCHAR
SQL_LONGVARCHAR
SQL_CLOB

表 198. 文字 SQL データから C データへの変換
fCType Test rgbValue pcbValue SQLSTATE
SQL_C_CHAR データ長 < cbValueMax データ データの長さ 00000
データ長 >= cbValueMax 切り捨てデータ データの長さ 01004
SQL_C_BINARY データ長 <= cbValueMax データ データの長さ 00000
データ長 > cbValueMax 切り捨てデータ データの長さ 01004

SQL_C_SHORT
SQL_C_LONG
SQL_C_FLOAT
SQL_C_FLOAT
SQL_C_TINYINT
SQL_C_BIT
SQL_C_UBIGINT
SQL_C_SBIGINT
SQL_C_NUMERIC c

切り捨てられずに変換されたデータ a データ C データ・タイプのサイズ
00000

変換され切り捨てられたデータ、ただし有効桁は失われていない a データ C データ・タイプのサイズ 01004
データの変換で、有効桁が失われる a 影響なし C データ・タイプのサイズ 22003
データは数値でない a 影響なし C データ・タイプのサイズ 22005
SQL_C_DATE データ値は有効な時刻 a データ 6 b 00000
データ値は有効な時刻ではない a 影響なし 6 b 22007
SQL_C_TIME データ値は有効な時刻 a データ 6 b 00000
データ値は有効な時刻ではない a 影響なし 6 b 22007
SQL_C_TIMESTAMP データ値は有効なタイム・スタンプ a データ 16 b 00000
データ値は有効なタイム・スタンプではない a 影響なし 16 b 22007
注:
a
cbValueMax の値はこの変換では無視されます。ドライバーは、 rgbValue のサイズは C データ・タイプのサイズであると想定します。
b
これは、対応する C データ・タイプのサイズです。
c
SQL_C_NUMERIC は 32 ビット Windows プラットフォーム上でのみサポートされます。

SQLSTATE 00000 は SQLError() では戻されません。これは、関数が SQL_SUCCESS を戻すときに示されます。

グラフィック SQL データから C データへの変換

グラフィック SQL データ・タイプは、以下のとおりです。

SQL_GRAPHIC
SQL_VARGRAPHIC
SQL_LONGVARGRAPHIC
SQL_DBCLOB

表 199. SQL グラフィック・データを C データに変換
fCType Test rgbValue pcbValue SQLSTATE
SQL_C_CHAR 2 バイト文字数 * 2 <= cbValueMax データ データの長さ (オクテット) 00000
2 バイト文字数 * 2 > cbValueMax cbValueMax 未満の最大偶数バイトに切り捨てられたデータ データの長さ (オクテット) 01004
SQL_C_DBCHAR 2 バイト文字数 * 2 < cbValueMax データ データの長さ (オクテット) 00000
2 バイト文字数 * 2 >= cbValueMax cbValueMax 未満の最大偶数バイトに切り捨てられたデータ データの長さ (オクテット) 01004
注:SQLSTATE 00000 は SQLError() では戻されません。これは、関数が SQL_SUCCESS を戻すときに示されます。

浮動小数点値への変換時に、結果値の非有効桁が失われていると、 SQLSTATE 22003 は戻されません。

SQL 数値データを C データに変換

SQL 数値データ・タイプは、以下のとおりです。

SQL_DECIMAL
SQL_NUMERIC
SQL_SMALLINT
SQL_INTEGER
SQL_BIGINT
SQL_REAL
SQL_FLOAT
SQL_DOUBLE

表 200. SQL 数値データを C データに変換
fCType Test rgbValue pcbValue SQLSTATE
SQL_C_CHAR 表示サイズ < cbValueMax データ データの長さ 00000
有効桁数 < cbValueMax 切り捨てデータ データの長さ 01004
有効桁数 >= cbValueMax 影響なし データの長さ 22003

SQL_C_SHORT
SQL_C_LONG
SQL_C_FLOAT
SQL_C_DOUBLE
SQL_C_TINYINT
SQL_C_BIT
SQL_C_UBIGINT
SQL_C_SBIGINT
SQL_C_NUMERIC b

切り捨てられずに変換されたデータ a データ C データ・タイプのサイズ 00000
変換され切り捨てられたデータ、ただし有効桁は失われていない a 切り捨てデータ C データ・タイプのサイズ 01004
データの変換で、有効桁が失われる a 影響なし C データ・タイプのサイズ 22003
注:
a
cbValueMax の値はこの変換では無視されます。ドライバーは、 rgbValue のサイズは C データ・タイプのサイズであると想定します。
b
SQL_C_NUMERIC は 32 ビット Windows プラットフォーム上でのみサポートされます。

SQLSTATE 00000 は SQLError() では戻されません。これは、関数が SQL_SUCCESS を戻すときに示されます。

2 進 SQL データから C データへの変換

2 進 SQL データ・タイプは次のとおりです。

SQL_BINARY
SQL_VARBINARY
SQL_LONGVARBINARY
SQL_BLOB

表 201. 2 進 SQL データから C データへの変換
fCType Test rgbValue pcbValue SQLSTATE
SQL_C_CHAR (データ長) < cbValueMax データ データの長さ なし
(データ長) >= cbValueMax 切り捨てデータ データの長さ 01004
SQL_C_BINARY データ長 <= cbValueMax データ データの長さ なし
データ長 > cbValueMax 切り捨てデータ データの長さ 01004

日付 SQL データから C データへの変換

日付 SQL データ・タイプは次のとおりです。

SQL_DATE

表 202. 日付 SQL データから C データへの変換
fCType Test rgbValue pcbValue SQLSTATE
SQL_C_CHAR cbValueMax >= 11 データ 10 00000
cbValueMax < 11 影響なし 10 22003
SQL_C_DATE なしa データ 6 b 00000
SQL_C_TIMESTAMP なしa データc 16 b 00000
注:
a
cbValueMax の値はこの変換では無視されます。ドライバーは、 rgbValue のサイズは C データ・タイプのサイズであると想定します。
b
これは、対応する C データ・タイプのサイズです。
c
TIMESTAMP_STRUCT 構造の時刻フィールドはゼロに設定されます。

SQLSTATE 00000 は SQLError() では戻されません。これは、関数が SQL_SUCCESS を戻すときに示されます。

日付 SQL データ・タイプが文字の C データ・タイプに変換される場合、ストリングは「yyyy-mm-dd」形式になります。

時刻 SQL データから C データへの変換

時刻 SQL データ・タイプは次のとおりです。

SQL_TIME

表 203. 時刻 SQL データから C データへの変換
fCType Test rgbValue pcbValue SQLSTATE
SQL_C_CHAR cbValueMax >= 9 データ 8 00000
cbValueMax < 9 影響なし 8 22003
SQL_C_TIME なしa データ 6 b 00000
SQL_C_TIMESTAMP なしa データc 16 b 00000
注:
a
cbValueMax の値はこの変換では無視されます。ドライバーは、 rgbValue のサイズは C データ・タイプのサイズであると想定します。
b
これは、対応する C データ・タイプのサイズです。
c
TIMESTAMP_STRUCT 構造の日付フィールドは、アプリケーションが実行しているマシンの現行システム日付に設定され、時刻小数部はゼロに設定されます。

SQLSTATE 00000 は SQLError() では戻されません。これは、関数が SQL_SUCCESS を戻すときに示されます。

時刻 SQL データ・タイプが文字の C データ・タイプに変換される場合、ストリングは「hh:mm:ss」形式になります。

タイム・スタンプ SQL データから C データへの変換

タイム・スタンプ SQL データ・タイプは次のとおりです。

SQL_TIMESTAMP

表 204. タイム・スタンプ SQL データから C データへの変換
fCType Test rgbValue pcbValue SQLSTATE
SQL_C_CHAR 表示サイズ < cbValueMax データ データの長さ 00000
19 <= cbValueMax <= 表示サイズ 切り捨てデータ b データの長さ 01004
cbValueMax < 19 影響なし データの長さ 22003
SQL_C_DATE なしa 切り捨てデータ c 6 e 01004
SQL_C_TIME なしa 切り捨てデータ d 6 e 01004
SQL_C_TIMESTAMP なしa データ 16 e 00000
注:
a
cbValueMax の値はこの変換では無視されます。ドライバーは、 rgbValue のサイズは C データ・タイプのサイズであると想定します。
b
タイム・スタンプの小数秒は切り捨てられます。
c
タイム・スタンプの時刻部分は削除されます。
d
タイム・スタンプの日付部分は削除されます。
e
これは、対応する C データ・タイプのサイズです。

SQLSTATE 00000 は SQLError() では戻されません。これは、関数が SQL_SUCCESS を戻すときに示されます。

タイム・スタンプ SQL データ・タイプが文字の C データ・タイプに変換される場合、ストリングは「yyyy-mm-dd hh:mm:ss[.fff[fff]]」形式になります。

SQL から C へのデータ変換例


表 205. SQL から C へのデータ変換例
SQL データ・タイプ SQL データ値 C データ・タイプ cbValue Max rgbValue SQL STATE
SQL_CHAR abcdef SQL_C_CHAR 7 abcdef\0 a 00000
SQL_CHAR abcdef SQL_C_CHAR 6 abcde\0 a 01004
SQL_DECIMAL 1234.56 SQL_C_CHAR 8 1234.56\0 a 00000
SQL_DECIMAL 1234.56 SQL_C_CHAR 5 1234\0 a 01004
SQL_DECIMAL 1234.56 SQL_C_CHAR 4 --- 22003
SQL_DECIMAL 1234.56 SQL_C_FLOAT 無視されます 1234.56 00000
SQL_DECIMAL 1234.56 SQL_C_SHORT 無視されます 1234 01004
SQL_DATE 1992-12-31 SQL_C_CHAR 11 1992-12-31\0 a 00000
SQL_DATE 1992-12-31 SQL_C_CHAR 10 --- 22003
SQL_DATE 1992-12-31 SQL_C_TIMESTAMP 無視されます 1992,12,31, 0,0,0,0 b 00000
SQL_TIMESTAMP 1992-12-31 23:45:55.12 SQL_C_CHAR 23 1992-12-31 23:45:55.12\0 a 00000
SQL_TIMESTAMP 1992-12-31 23:45:55.12 SQL_C_CHAR 22 1992-12-31 23:45:55.1\0 a 01004
SQL_TIMESTAMP 1992-12-31 23:45:55.12 SQL_C_CHAR 18 --- 22003
注:
a
「\0」はヌル終了文字を表します。
b
このリストの数値は、TIMESTAMP_STRUCT 構造体のフィールドに保管される数値です。

SQLSTATE 00000 は SQLError() では戻されません。これは、関数が SQL_SUCCESS を戻すときに示されます。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]