Data Type Mapping in ITableDefinition

When creating tables by using ITableDefinition::CreateTable, the SQLOLEDB consumer can specify SQL Server data types in the pwszTypeName member of the DBCOLUMNDESC array passed. If the consumer specifies a column’s data type by name, then OLE DB type mapping, represented by the wType member of the DBCOLUMNDESC structure, is ignored.

When specifying new column data types with OLE DB types, that is, when using the DBCOLUMNDESC structure wType member, SQLOLEDB maps OLE DB types as follows.


OLE DB data type
SQL Server data type
Additional information
DBTYPE_BOOL bit
DBTYPE_BYTES binary, varbinary or image SQLOLEDB inspects the ulColumnSize member of the DBCOLUMNDESC structure. Based on the value, and the version of the SQL Server, SQLOLEDB maps the type to image.

If the value of ulColumnSize is smaller than the maximum length of a binary data type column, then SQLOLEDB inspects the DBCOLUMNDESC rgPropertySets member. If the DBPROP_COL_
FIXEDLENGTH is VARIANT_
TRUE, SQLOLEDB maps the type to binary. If the value of the property is VARIANT_FALSE, SQLOLEDB maps the type to varbinary. In either case, the DBCOLUMNDESC ulColumnSize member determines the width of the SQL Server column created.

DBTYPE_CY money
DBTYPE_
DBTIMESTAMP
datetime
DBTYPE_GUID uniqueidentifier
DBTYPE_I2 smallint
DBTYPE_I4 int
DBTYPE_NUMERIC numeric SQLOLEDB inspects the DBCOLUMDESC bPrecision and bScale members to determine precision and scale for the numeric column.
DBTYPE_R4 real
DBTYPE_R8 float
DBTYPE_STR char, varchar or text SQLOLEDB inspects the ulColumnSize member of the DBCOLUMNDESC structure. Based on the value and the version of the SQL Server, SQLOLEDB maps the type to text.

If the value of ulColumnSize is smaller than the maximum length of a multibyte character data type column, then SQLOLEDB inspects the DBCOLUMNDESC rgPropertySets member. If the DBPROP_COL_FIXEDLENGTH is VARIANT_TRUE, SQLOLEDB maps the type to char. If the value of the property is VARIANT_
FALSE, SQLOLEDB maps the type to varchar. In either case, the DBCOLUMNDESC ulColumnSize member determines the width of the SQL Server column created.

DBTYPE_UI1 TINYINT

Note   When creating a new table, SQLOLEDB maps only the OLE DB data type enumeration values specified in the table above. Attempting to create a table with a column of any other OLE DB type generates an error.