CLI の手引きおよび解説書

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

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

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

SQLBindParameter() または SQLSetParam()fSqlType 引き数に、指定の C データ・タイプについて表にない値が含まれている場合、 SQLSTATE 07006 (データ・タイプ属性制約違反) が戻されます。

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

SQLBindParameter() または SQLSetParam() に指定された rgbValue および pcbValue 引き数が両方ともヌル・ポインターである場合、その関数は SQLSTATE HY009 (引き数値が無効です) を戻します。

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

列の長さ
データが省略時 C データ・タイプへ転送されるときにアプリケーションに戻されるバイトの最大数。文字データの場合、長さにはヌル終了バイトは含まれません。

表示サイズ
データを文字書式で表示するために必要な最大バイト数。

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

C 文字データを SQL データに変換

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

SQL_C_CHAR

表 206. 文字 C データから SQL データへの変換
fSQLType Test SQLSTATE

SQL_CHAR
SQL_VARCHAR
SQL_LONGVARCHAR
SQL_CLOB

データ長 <= 列長 00000
データ長 > 列長 22001

SQL_DECIMAL
SQL_NUMERIC
SQL_SMALLINT
SQL_INTEGER
SQL_REAL
SQL_FLOAT
SQL_DOUBLE

切り捨てられずに変換されたデータ 00000
変換され切り捨てられたデータ、ただし有効桁は失われていない 22001
データ変換の結果、有効桁が消失する 22003
データ値は数値ではない 22005

SQL_BINARY
SQL_VARBINARY
SQL_LONGVARBINARY
SQL_BLOB

(データ長) < 列長 なし
(データ長) >= 列長 22001
データ値は 16 進値ではない 22005
SQL_DATE データ値は有効な日付 00000
データ値は有効な日付ではない 22007
SQL_TIME データ値は有効な時刻 00000
データ値は有効な時刻ではない 22007
SQL_TIMESTAMP データ値は有効なタイム・スタンプ 00000
データ値は有効なタイム・スタンプではない 22007

SQL_GRAPHIC
SQL_VARGRAPHIC
SQL_LONGVARGRAPHIC
SQL_DBCLOB

データ長 / 2 <= 列長 00000
データ長 / 2 < 列長 22001

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

C 数値データから SQL データへの変換

数値 C データ・タイプは次のとおりです。

SQL_C_SHORT
SQL_C_LONG
SQL_C_FLOAT
SQL_C_DOUBLE
SQL_C_TINYINT
SQL_C_BIT

表 207. 数値 C データから SQL データへの変換
fSQLType Test SQLSTATE

SQL_DECIMAL
SQL_NUMERIC
SQL_SMALLINT
SQL_INTEGER
SQL_REAL
SQL_FLOAT
SQL_DOUBLE

切り捨てられずに変換されたデータ 00000
変換され切り捨てられたデータ、ただし有効桁は失われていない 22001
データ変換の結果、有効桁が消失する 22003

SQL_CHAR
SQL_VARCHAR

切り捨てられずに変換されたデータ 00000
データの変換で有効桁が失われる 22003

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

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

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

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

SQL_C_BINARY

表 208. 2 進 C データから SQL データへの変換
fSQLType Test SQLSTATE

SQL_CHAR
SQL_VARCHAR
SQL_LONGVARCHAR
SQL_CLOB

データ長 <= 列長 なし
データ長 > 列長 22001

SQL_BINARY
SQL_VARBINARY
SQL_LONGVARBINARY
SQL_BLOB

データ長 <= 列長 なし
データ長 > 列長 22001

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

2 バイト C データ・タイプは次のとおりです。

SQL_C_DBCHAR

表 209. DBCHAR C データから SQL データへの変換
fSQLType Test SQLSTATE

SQL_CHAR
SQL_VARCHAR
SQL_LONGVARCHAR
SQL_CLOB

データ長 <= 列長 x 2 なし
データ長 > 列長 x 2 22001

SQL_BINARY
SQL_VARBINARY
SQL_LONGVARBINARY
SQL_BLOB

データ長 <= 列長 x 2 なし
データ長 > 列長 x 2 22001

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

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

SQL_C_DATE

表 210. 日付 C データから SQL データへの変換
fSQLType Test SQLSTATE

SQL_CHAR
SQL_VARCHAR

列長 >= 10 00000
列長 < 10 22003
SQL_DATE データ値は有効な日付 00000
データ値は有効な日付ではない 22007
SQL_TIMESTAMP a データ値は有効な日付 00000
データ値は有効な日付ではない 22007

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

注:a、TIMESTAMP の時刻構成要素はゼロに設定されます。

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

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

SQL_C_TIME

表 211. 時刻 C データから SQL データへの変換
fSQLType Test SQLSTATE

SQL_CHAR
SQL_VARCHAR

列長 >= 8 00000
列長 < 8 22003
SQL_TIME データ値は有効な時刻 00000
データ値は有効な時刻ではない 22007
SQL_TIMESTAMP a データ値は有効な時刻 00000
データ値は有効な時刻ではない 22007

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

注:a、TIMESTAMP の日付構成要素は、アプリケーションが実行しているマシンのシステム日付に設定されます。

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

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

SQL_C_TIMESTAMP

表 212. タイム・スタンプ C データから SQL データへの変換
fSQLType Test SQLSTATE
SQL_CHAR SQL_VARCHAR 列長 >= 表示サイズ 00000
19 <= 列長 < 表示サイズ a 22001
列長 < 19 22003
SQL_DATE データ値は有効な日付 b 22001
データ値は有効な日付ではない 22007
SQL_TIME データ値は有効な時刻 c 22001
データ値は有効な時刻ではない 22007
SQL_TIMESTAMP データ値は有効なタイム・スタンプ 00000
データ値は有効なタイム・スタンプではない 22007
注:
a
タイム・スタンプの小数秒は切り捨てられます。
b
タイム・スタンプの時刻部分は削除されます。
c
タイム・スタンプの日付部分は削除されます。

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

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


表 213. C から SQL へのデータ変換例
C データ・タイプ C データ値 SQL データ・タイプ 列長 SQL データ値 SQL STATE
SQL_C_CHAR abcdef\0 SQL_CHAR 6 abcdef 00000
SQL_C_CHAR abcdef\0 SQL_CHAR 5 abcde 22001
SQL_C_CHAR 1234.56\0 SQL_DECIMAL 6 1234.56 00000
SQL_C_CHAR 1234.56\0 SQL_DECIMAL 5 1234.5 22001
SQL_C_CHAR 1234.56\0 SQL_DECIMAL 3 --- 22003
SQL_C_FLOAT 1234.56 SQL_FLOAT
該当せず

1234.56 00000
SQL_C_FLOAT 1234.56 SQL_INTEGER
該当せず

1234 22001

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


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