The classes RWDBColumn and RWDBValue have an associated RWDBValue::ValueType that specifies the data type of the database column or field being referenced. Mapping between this data type and the database vendor type runs in both directions:
When fetching data or retrieving information about tables, the DB Access Module for ODBC converts the SQL data type provided by ODBC into RWDBValue::ValueTypes. This mapping is shown in Table 1, which also gives the C++ data type corresponding to the RWDBValue::ValueType.
When creating tables, the DB Access Module for ODBC maps the given RWDBValue::ValueType into an SQL data type. This mapping is shown in Table 2.
The RWDBValue::ValueTypes, accessible through the type() method, are uniform across all Access Modules. For a complete explanation of the DB Interface Module data model, see Chapter 7, "The Data Model," in the DB Interface Module User's Guide, and RWDBValue in the SourcePro C++ API Reference Guide.
ODBC Data Type | RWDBValue::ValueType | C++ Data Type |
SQL_NUMERIC SQL_DECIMAL |
Decimal | RWDecimalPortable |
SQL_BINARY SQL_VARBINARY SQL_LONGVARBINARY |
Blob | RWDBBlob |
SQL_BIT | UnsignedChar | unsigned char |
SQL_DOUBLE SQL_FLOAT |
Double | double |
SQL_INTEGER | Long/UnsignedLong (32-bit architectures) Int/UnsignedInt (64-bit architectures) |
long int / unsigned long int (32-bit architectures) int / unsigned int (64-bit architectures) |
SQL_INTERVAL | Duration | RWDBDuration |
SQL_LONGVARCHAR SQL_VARCHAR SQL_CHAR |
String | RWCString |
SQL_REAL | Float | float |
SQL_SMALLINT | Short UnsignedShort |
short int unsigned short int |
SQL_TYPE_DATE | Date | RWDate |
SQL_TYPE_TIME SQL_TYPE_TIMESTAMP1 |
DateTime | RWDBDateTime2 RWDateTime |
SQL_WLONGVARCHAR SQL_WVARCHAR SQL_WCHAR |
WString | RWWString |
SQL_BIGINT | LongLong UnsignedLongLong |
long long unsigned long long |
RWDBValue::ValueType | Possible ODBC Data Types: the type chosen is the first type supported by the underlying driver |
Blob | If 0 < length <= 255, {SQL_VARBINARY, SQL_BINARY, SQL_LONGVARBINARY, SQL_LONGVARCHAR} using the storageLength of the RWDBColumn if applicable; otherwise, {SQL_LONGVARBINARY,SQL_VARBINARY,SQL_BINARY, SQL_LONGVARCHAR} using the storageLength of the RWDBColumn if applicable |
Char, UnsignedChar | {SQL_TINYINT, SQL_SMALLINT, SQL_INTEGER, SQL_DECIMAL, SQL_NUMERIC} |
Date | {SQL_TYPE_DATE, SQL_TYPE_TIMESTAMP} |
DateTime | {SQL_TYPE_TIMESTAMP, SQL_TYPE_DATE} |
Decimal | {SQL_DECIMAL, SQL_NUMERIC, SQL_DOUBLE}, using the precision and scale of the RWDBColumn if applicable |
Double | {SQL_DOUBLE, SQL_FLOAT, SQL_DECIMAL, SQL_NUMERIC } |
Duration | {SQL_INTERVAL_SECOND} |
Float | {SQL_REAL, SQL_DOUBLE, SQL_FLOAT, SQL_DECIMAL, SQL_NUMERIC} using the precision and scale of the RWDBColumn if applicable |
Int, UnsignedInt | {SQL_SMALLINT, SQL_INTEGER, SQL_REAL, SQL_DOUBLE, SQL_FLOAT, SQL_DECIMAL, SQL_NUMERIC} |
Long, UnsignedLong | {SQL_INTEGER, SQL_REAL, SQL_DOUBLE, SQL_FLOAT, SQL_DECIMAL, SQL_NUMERIC} |
LongLong, UnsignedLongLong | {SQL_BIGINT, SQL_DECIMAL, SQL_REAL}1 |
Short, UnsignedShort | {SQL_SMALLINT, SQL_INTEGER, SQL_REAL, SQL_DOUBLE, SQL_FLOAT, SQL_DECIMAL, SQL_NUMERIC} |
String | If 0 < length <= 255,{SQL_VARCHAR, SQL_CHAR, SQL_LONGVARCHAR}; otherwise, {SQL_LONGVARCHAR, SQL_VARCHAR, SQL_CHAR} using the storageLength of the RWDBColumn, if applicable. |
WString UString |
If 0 < length <= 254, {SQL_WVARCHAR, SQL_WCHAR, SQL_WLONGVARCHAR} using the storageLength of the RWDBColumn if applicable; otherwise, {SQL_WLONGVARCHAR,SQL_WVARCHAR, SQL_WCHAR} using the storageLength of the RWDBColumn if applicable. |
Neither the DB Interface Module nor the ODBC specification impose restrictions on the use of most data types, but individual ODBC drivers may. Check for specific restrictions in the documentation provided with your ODBC driver. Table 3 outlines the known restrictions associated with each DB Interface Module type.
RWDBValue::ValueType | Restrictions |
Blob | No restrictions. |
Char, UnsignedChar | No restrictions. |
Date | No restrictions. |
DateTime | No restrictions. |
Decimal | No restrictions. |
Double | No restrictions. |
Duration | No restrictions. |
Float | No restrictions. |
Int, UnsignedInt | No restrictions. |
Long, UnsignedLong | No restrictions. |
LongLong, UnsignedLongLong | No restrictions. |
MBString | This data type is not supported. |
String | No restrictions. |
Short, UnsignedShort | No restrictions. |
WString UString |
This data type may not be supported—check your driver documentation. Refer to Section 2.12 for more information. |
LongDouble | For input binding, long double value inserted should be in range of what database supports. Please check your database documentation for details. |
Copyright © Rogue Wave Software, Inc. All Rights Reserved.
The Rogue Wave name and logo, and SourcePro, are registered trademarks of Rogue Wave Software. All other trademarks are the property of their respective owners.
Provide feedback to Rogue Wave about its documentation.