Mapeamento de tipos de dados em conjuntos de linhas e parâmetros
Nos conjuntos de linhas e como valores de parâmetro, o provedor OLE DB do SQL Server Native Client representa dados do SQL Server usando os tipos de dados OLE DB definidos a seguir, relatados nas funções IColumnsInfo::GetColumnInfo e ICommandWithParameters::GetParameterInfo.
Tipo de dados do SQL Server |
Tipo de dados OLE DB |
---|---|
bigint |
DBTYPE_I8 |
binary |
DBTYPE_BYTES |
bit |
DBTYPE_BOOL |
char |
DBTYPE_STR |
datetime |
DBTYPE_DBTIMESTAMP |
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 |
O provedor OLE DB do SQL Server Native Client dá suporte a conversões de dados solicitadas pelo consumidor, como mostrado na ilustração.
Os objetos sql_variant podem armazenar qualquer tipo de dados do SQL Server exceto text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, timestamp e os tipos de dados CLR definidos pelo usuário do Microsoft .NET Framework. Uma instância de dados sql_variant também não pode ter sql_variant como seu tipo de dados base subjacente. Por exemplo, a coluna pode conter valores smallint em algumas linhas, valores float em outras linhas e valores char/nchar no restante.
Observação |
---|
O tipo de dados sql_variant é semelhante ao tipo de dados Variant no Microsoft Visual Basic® e ao DBTYPE_VARIANT, DBTYPE_SQLVARIANT no OLEDB. |
Quando dados sql_variant são buscados como DBTYPE_VARIANT, eles são colocados em uma estrutura VARIANT no buffer. Mas os subtipos na estrutura VARIANT podem não ser mapeados para os subtipos definidos no tipo de dados sql_variant. Desse modo, os dados sql_variant devem ser buscados como DBTYPE_SQLVARIANT para que todos os subtipos sejam correspondidos.
Tipo de dados DBTYPE_SQLVARIANT
Para dar suporte ao tipo de dados sql_variant, o provedor OLE DB do SQL Server Native Client expõe um tipo de dados específico do provedor denominado DBTYPE_SQLVARIANT. Quando dados sql_variant são buscados como DBTYPE_SQLVARIANT, eles são armazenados em uma estrutura SSVARIANT específica do provedor. A estrutura SSVARIANT contém todos os subtipos que correspondem aos subtipos do tipo de dados sql_variant.
A propriedade de sessão SSPROP_ALLOWNATIVEVARIANT também deve ser definida como TRUE.
Propriedade específica de provedor SSPROP_ALLOWNATIVEVARIANT
Ao buscar dados, você pode especificar explicitamente que tipo de dados deveria ser retornado para uma coluna ou um parâmetro. IColumnsInfo também pode ser usado para obter informações sobre colunas e usá-las para fazer a associação. Quando IColumnsInfo é usado para obter informações sobre colunas para fins de associação, se a propriedade de sessão SSPROP_ALLOWNATIVEVARIANT for FALSE (valor padrão), DBTYPE_VARIANT será retornado para as colunas sql_variant. Se a propriedade SSPROP_ALLOWNATIVEVARIANT for FALSE, não haverá suporte para DBTYPE_SQLVARIANT. Se a propriedade SSPROP_ALLOWNATIVEVARIANT for definida como TRUE, o tipo de coluna será retornado como DBTYPE_SQLVARIANT; nesse caso o buffer armazenará a estrutura SSVARIANT. Quando você busca dados sql_variant como DBTYPE_SQLVARIANT, a propriedade de sessão SSPROP_ALLOWNATIVEVARIANT deverá ser definida como TRUE.
A propriedade SSPROP_ALLOWNATIVEVARIANT faz parte do conjunto de propriedades DBPROPSET_SQLSERVERSESSION específicas de provedor, sendo uma propriedade de sessão.
DBTYPE_VARIANT se aplica a todos os outros provedores OLE DB.
SSPROP_ALLOWNATIVEVARIANT
SSPROP_ALLOWNATIVEVARIANT é uma propriedade de sessão e faz parte do conjunto de propriedades DBPROPSET_SQLSERVERSESSION.
SSPROP_ALLOWNATIVEVARIANT |
Tipo: VT_BOOL Leitura/gravação: leitura/gravação Padrão: VARIANT_FALSE Descrição: Determina se os dados buscados são como DBTYPE_VARIANT ou DBTYPE_SQLVARIANT. VARIANT_TRUE: o tipo de coluna é retornado como DBTYPE_SQLVARIANT e o buffer terá a estrutura SSVARIANT. VARIANT_FALSE: o tipo de coluna é retornado como DBTYPE_VARIANT e o buffer terá a estrutura VARIANT. |