次の方法で共有


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

注意

この内容は、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)