Asignar tipos de datos en conjuntos de filas y parámetros
En conjuntos de filas y como valores de parámetro, el proveedor OLE DB de SQL Server Native Client representa los datos de SQL Server mediante los siguientes tipos de datos definidos por OLE DB, notificados en las funciones IColumnsInfo::GetColumnInfo e ICommandWithParameters::GetParameterInfo.
Tipo de datos de SQL Server |
Tipo de datos de 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 |
UDT |
DBTYPE_UDT |
uniqueidentifier |
DBTYPE_GUID |
varbinary |
DBTYPE_BYTES |
varchar |
DBTYPE_STR |
XML |
DBTYPE_XML |
El proveedor OLE DB de SQL Server Native Client admite conversiones de datos solicitadas por el consumidor, tal como se muestra en la ilustración.
Los objetos sql_variant pueden contener datos de cualquier tipo de datos de SQL Server excepto text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, timestamp y los tipos definidos por el usuario de Common Language Runtime (CLR) de Microsoft .NET Framework. Una instancia de datos sql_variant no puede tener sql_variant como tipo de datos base subyacente. Por ejemplo, la columna puede contener valores smallint en algunas filas, valores float en otras filas y valores char/nchar en el resto.
Nota
El tipo de datos sql_variant es similar al tipo de datos Variant de Microsoft Visual Basic® y DBTYPE_VARIANT, DBTYPE_SQLVARIANT de OLEDB.
Cuando los datos sql_variant se capturan como DBTYPE_VARIANT, se incluyen en una estructura VARIANT en el búfer. Sin embargo, es posible que los subtipos de la estructura VARIANT no se asignen a los subtipos definidos en el tipo de datos sql_variant. Los datos sql_variant se deben capturar en este caso como DBTYPE_SQLVARIANT para que todos los subtipos coincidan.
Tipo de datos DBTYPE_SQLVARIANT
Para admitir el tipo de datos sql_variant, el proveedor OLE DB de SQL Server Native Client expone un tipo de datos específico del proveedor denominado DBTYPE_SQLVARIANT. Cuando los datos sql_variant se capturan como DBTYPE_SQLVARIANT, se almacenan en una estructura SSVARIANT específica del proveedor. La estructura SSVARIANT contiene todos los subtipos que coinciden con los subtipos del tipo de datos sql_variant.
La propiedad SSPROP_ALLOWNATIVEVARIANT de la sesión también debe estar establecida en TRUE.
Propiedad SSPROP_ALLOWNATIVEVARIANT específica del proveedor
Al capturar los datos, puede especificar explícitamente qué clase de tipo de datos se debería devolver para una columna o para un parámetro. También se puede usar IColumnsInfo para obtener la información de columna y usarla al crear el enlace. Cuando se usa IColumnsInfo para obtener información de columna con fines de enlace, si la propiedad SSPROP_ALLOWNATIVEVARIANT de sesión es FALSE (valor predeterminado), en las columnas sql_variant se devuelve DBTYPE_VARIANT. Si la propiedad SSPROP_ALLOWNATIVEVARIANT es FALSE, no se admite DBTYPE_SQLVARIANT. Si la propiedad SSPROP_ALLOWNATIVEVARIANT está establecida en TRUE, el tipo de columna se devuelve como DBTYPE_SQLVARIANT, en cuyo caso el búfer contendrá la estructura SSVARIANT. Al capturar datos sql_variant como DBTYPE_SQLVARIANT, la propiedad SSPROP_ALLOWNATIVEVARIANT de sesión debe estar establecida en TRUE.
La propiedad SSPROP_ALLOWNATIVEVARIANT forma parte del conjunto de propiedades DBPROPSET_SQLSERVERSESSION específico del proveedor y es una propiedad de sesión.
DBTYPE_VARIANT se aplica a todos los demás proveedores OLE DB.
SSPROP_ALLOWNATIVEVARIANT
SSPROP_ALLOWNATIVEVARIANT es una propiedad de sesión y forma parte del conjunto de propiedades DBPROPSET_SQLSERVERSESSION.
SSPROP_ALLOWNATIVEVARIANT |
Tipo: VT_BOOL L/E: lectura/escritura Valor predeterminado: VARIANT_FALSE Descripción: determina si los datos se capturan como DBTYPE_VARIANT o DBTYPE_SQLVARIANT. VARIANT_TRUE: el tipo de columna se devuelve como DBTYPE_SQLVARIANT, en cuyo caso el búfer contendrá la estructura SSVARIANT. VARIANT_FALSE: el tipo de columna se devuelve como DBTYPE_VARIANT y el búfer contendrá la estructura VARIANT. |