Datatypes
The classes
RWDBColumn and
RWDBValue have an associated
RWDBValue::ValueType that specifies the datatype of the database column or field being referenced. Mapping between this datatype and the database vendor type runs in both directions:
• When fetching data or retrieving information about tables, the DB Access Module for Sybase converts the Sybase-specific datatype information provided by the database into RWDBValue::ValueTypes. This mapping is shown in Table 1, which also gives the C++ datatype corresponding to the RWDBValue::ValueType.
• When creating tables, the DB Access Module for Sybase maps the given
RWDBValue::ValueType into a Sybase-specific 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
../sourceproref:index.htmlSourcePro C++ API Reference Guide.
.
Table 1 – Datatype mapping when retrieving data
Adaptive Server Datatypes | RWDBValue::ValueType | C++ Datatype |
char(n) varchar(n) text | String | |
nchar(n) nvarchar(n) | MBString | |
unichar(n), univarchar(n) unitext | UString | |
binary(n) varbinary(n) image timestamp | Blob | |
bit tinyint smallint | Short | short int |
int | Long | long int |
decimal(p,0) p <= 9 numeric(p,0) p <= 9 | Long | long int |
decimal(p,0) 10 <= p < 19 numeric(p,0) 10 <= p < 19 | LongLong | long long |
decimal(p,0) p >= 19 numeric(p,0) p >= 19 | Decimal | |
decimal(p,s) numeric(p,s) | Decimal | |
float(p) double precision | Double | double |
real | Float | float |
money smallmoney | Decimal | |
datetime smalldatetime | DateTime | |
Table 2 – Datatype mapping when creating tables
RWDBValue::ValueType | Adaptive Server Datatype |
Char UnsignedChar Tiny UnsignedTiny | tinyint |
String | if 0 < length <= 255, varchar using the storageLength of the RWDBColumn, otherwise text |
WString MBString | if 0 < length <= 255, nvarchar using the storageLength of the RWDBColumn, otherwise text |
UString | univarchar, using the storageLength of the RWDBColumn |
Blob | if 0 < length <= 255, varbinary using the storageLength of the RWDBColumn, otherwise image |
Short UnsignedShort | smallint |
Int UnsignedInt | int |
Long UnsignedLong | int |
Float | real |
Double | float(p), using precision of column |
Decimal | money or decimal(p,s) using precision and scale of column. See below. |
Date DateTime | datetime |
Duration | Not supported by the Sybase client |
Restrictions on the Use of Datatypes
Sybase Open Client Client-Library and Sybase Adaptive Server Enterprise place restrictions on the use of certain datatypes. Where possible, the DB Interface Module is flexible about datatypes. However, there are some situations where conversions are not possible, and in these cases your application must be aware of the contexts in which certain datatypes can be used.
Table 3 outlines the restrictions associated with each DB Interface Module type.
Table 3 – Restrictions on the use of DB Interface Module datatypes
RWDBValue::ValueType | Restrictions |
Char UnsignedChar | No restrictions. |
String WString MBString UString | Not supported on RWDBBoundExpr if string size is bigger than 16384 bytes. |
Blob | Not supported on RWDBBoundExpr. |
Short UnsignedShort | No restrictions. |
Int UnsignedInt | No restrictions. |
Long UnsignedLong | No restrictions. |
Double | No restrictions. |
Float | No restrictions. |
Decimal | The precision and scale of a value can vary depending on the version of the Sybase client and server. Consistent versions of clients and servers can eliminate difficulties in conversions. |
Date | No restrictions. |
DateTime | Accuracy limited to 3.33 milliseconds by Sybase. |
Duration | Not supported by the Sybase client |
LongLong UnsignedLongLong | Table creation not supported. |
LongDouble | No restrictions. |