SQL : SQL と C++ のデータ型 (ODBC)

更新 : 2007 年 11 月

eshhha8h.alert_note(ja-jp,VS.90).gifメモ :

この内容は、MFC ODBC クラスに該当します。MFC DAO クラスを使用している場合は、DAO ヘルプの「Comparison of Microsoft Jet Database Engine SQL and ANSI SQL」を参照してください。

次の表に、ANSI SQL のデータ型と C++ のデータ型の対応を示します。この表は、MSDN ライブラリ CD の『ODBC Programmer's Reference』の「Appendix D: Data Types」を補足したものです。データ型の変換は、ほとんどウィザードが自動的に行います。ウィザードを使わない場合は、この表を参照して各フィールドのデータ交換を行ってください。

ANSI SQL データ型と C++ データ型の対応

ANSI SQL データ型

C++ データ型

CHAR

CString

DECIMAL

CString 1

SMALLINT

int

REAL

float

INTEGER

long

FLOAT

DOUBLE

DOUBLE

DOUBLE

NUMERIC

CString 1

VARCHAR

CString

LONGVARCHAR

CLongBinary, CString 2

BIT

BOOL

TINYINT

BYTE

BIGINT

CString 1

BINARY

CByteArray

VARBINARY

CByteArray

LONGVARBINARY

CLongBinary, CByteArray 3

DATE

CTime, CString

TIME

CTime、CString

TIMESTAMP

CTime、CString

1. SQL_C_CHAR が既定の SQL 変換型なので、ANSI DECIMALNUMERICCString に変換されます。

2. 既定では、255 文字を超える文字データは、256 文字目以降が切り捨てられ、CString に変換されます。RFX_Text の nMaxLength 引数を明示的に設定することにより、切り捨ての長さを拡張できます。

3. 既定では、255 文字を超えるバイナリ データは、256 文字目以降が切り捨てられ、CByteArray に変換されます。RFX_Binary の nMaxLength 引数を明示的に設定することにより、切り捨ての長さを拡張できます。

ODBC カーソル ライブラリを使用しないと、Microsoft SQL Server ODBC ドライバと MFC ODBC データベース クラスを使用して長い可変長フィールドを複数更新できないことがあります。ODBC の SQL_LONGVARCHAR 型と SQL_LONGVARBINARY 型は、SQL サーバーの text 型と image 型に対応付けられています。複数の長い可変長フィールドを 1 回の CRecordset::Update 呼び出しで更新すると、CDBException がスローされます。したがって、CRecordset::Update の 1 回の呼び出しで長い列を複数同時に更新しないでください。ODBC API 関数 SQLPutData では、長い列を複数同時に更新できます。ODBC カーソル ライブラリも使用できます。ただし、SQL サーバー ドライバなど、カーソルをサポートしていているドライバの場合は、カーソル ライブラリは必要ありません。

MFC ODBC データベース クラスおよび Microsoft SQL Server ODBC ドライバで ODBC カーソル ライブラリを使用すると、CRecordset::Requery を呼び出してから CRecordset::Update を呼び出したときに、CDBExceptionASSERT が同時に発生します。このような場合は、CRecordset::Requery ではなく、CRecordset::CloseCRecordset::Open を呼び出します。または、ODBC カーソル ライブラリを使わないようにします。SQL サーバーと SQL サーバー ODBC ドライバは、本来カーソルをサポートしているので、ODBC カーソル ライブラリは必要ないからです。

参照

概念

SQL

SQL : SQL の直接呼び出し (ODBC)