Сопоставление типов данных в наборах строк и параметрах
В наборах строк и в качестве значений параметров поставщик OLE DB для собственного клиента SQL Server представляет данные SQL Server с помощью следующих определенных типов данных OLE DB, сообщаемых в функциях IColumnsInfo::GetColumnInfo и ICommandWithParameters::GetParameterInfo.
Тип данных SQL Server |
Тип данных OLE DB |
---|---|
bigint |
DBTYPE_I8 |
binary |
DBTYPE_BYTES |
bit |
DBTYPE_BOOL |
char |
DBTYPE_STR |
datetime |
DBTYPE_DBTIMESTAMP |
datetime2 |
DBTYPE_DBTIME2 |
decimal |
DBTYPE_NUMERIC |
float |
DBTYPE_R8 |
image |
DBTYPE_BYTES |
int |
DBTYPE_I4 |
money |
DBTYPE_CY |
nchar |
DBTYPE_WSTR |
ntext |
DBTYPE_WSTR |
numeric |
DBTYPE_NUMERIC |
nvarchar |
DBTYPE_WSTR |
real |
DBTYPE_R4 |
smalldatetime |
DBTYPE_DBTIMESTAMP |
smallint |
DBTYPE_I2 |
smallmoney |
DBTYPE_CY |
sql_variant |
DBTYPE_VARIANT, DBTYPE_SQLVARIANT |
sysname |
DBTYPE_WSTR |
text |
DBTYPE_STR |
timestamp |
DBTYPE_BYTES |
tinyint |
DBTYPE_UI1 |
Определяемый пользователем тип |
DBTYPE_UDT |
uniqueidentifier |
DBTYPE_GUID |
varbinary |
DBTYPE_BYTES |
varchar |
DBTYPE_STR |
XML |
DBTYPE_XML |
Поставщик OLE DB для собственного клиента SQL Server поддерживает запрашиваемые потребителем преобразования данных, как показано на иллюстрации.
Объекты sql_variant могут хранить данные SQL Server любого типа, кроме text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, timestamp и определяемых пользователем типов данных CLR платформы Microsoft .NET Framework. Экземпляр данных sql_variant не может также иметь sql_variant в качестве базового типа данных. Например, столбец может содержать значения smallint в некоторых строках, значения float в других строках и значения char/nchar в остальных.
![]() |
---|
Тип данных sql_variant аналогичен типу данных Variant в Microsoft Visual Basic® и типу данных DBTYPE_VARIANT, DBTYPE_SQLVARIANT в OLEDB. |
Если данные sql_variant получены как DBTYPE_VARIANT, они размещаются в структуре VARIANT в буфере. Но подтипы в структуре VARIANT могут не соответствовать подтипам, определенным в типе данных sql_variant. Затем данные sql_variant должны быть выбраны как DBTYPE_SQLVARIANT, чтобы сопоставить все подтипы.
Тип данных DBTYPE_SQLVARIANT
Для поддержки типа данных sql_variant поставщик OLE DB для собственного клиента SQL Server предоставляет специфический для поставщика тип данных, называемый DBTYPE_SQLVARIANT. Если данные sql_variant получены как DBTYPE_SQLVARIANT, они размещаются в специфической для поставщика структуре SSVARIANT. Структура SSVARIANT содержит все подтипы, сопоставленные с подтипами типа данных sql_variant.
Свойство сеанса SSPROP_ALLOWNATIVEVARIANT должно быть равно true.
Специфическое для поставщика свойство SSPROP_ALLOWNATIVEVARIANT
При выборке данных можно явно указать разновидность типа данных, которые должны быть возвращены для столбца или для параметра. Интерфейс IColumnsInfo может также использоваться, чтобы получить сведения о столбце и использовать их для привязки. Если интерфейс IColumnsInfo используется, чтобы получить сведения о столбце для привязки, а свойство сеанса SSPROP_ALLOWNATIVEVARIANT имеет значение FALSE (по умолчанию), для столбцов sql_variant возвращается DBTYPE_VARIANT. Если свойство SSPROP_ALLOWNATIVEVARIANT имеет значение FALSE, DBTYPE_SQLVARIANT не поддерживается. Если свойство SSPROP_ALLOWNATIVEVARIANT имеет значение TRUE, возвращается тип столбца DBTYPE_SQLVARIANT. В этом случае в буфере сохраняется структура SSVARIANT. При выборке данных sql_variant как данных типа DBTYPE_SQLVARIANT свойство сеанса SSPROP_ALLOWNATIVEVARIANT должно быть равно true.
Свойство SSPROP_ALLOWNATIVEVARIANT является частью специфического для поставщика набора свойств DBPROPSET_SQLSERVERSESSION и свойством сеанса.
DBTYPE_VARIANT применяется ко всем другим поставщикам OLE DB.
SSPROP_ALLOWNATIVEVARIANT
Свойство SSPROP_ALLOWNATIVEVARIANT является свойством сеанса и частью набора свойств DBPROPSET_SQLSERVERSESSION.
Свойство SSPROP_ALLOWNATIVEVARIANT |
Тип: VT_BOOL Чтение-запись: чтение и запись По умолчанию: VARIANT_FALSE Описание: Определяет, имеют ли данные, полученные в результате выборки, тип DBTYPE_VARIANT или DBTYPE_SQLVARIANT. VARIANT_TRUE: Возвращается тип столбца DBTYPE_SQLVARIANT. В этом случае в буфере сохраняется структура SSVARIANT. VARIANT_FALSE: Возвращается столбец типа DBTYPE_VARIANT и в буфере сохраняется структура VARIANT. |