Mapping dei tipi di dati in set di righe e parametri
Nei set di righe e come valori di parametro, il provider OLE DB di SQL Server Native Client rappresenta i dati di SQL Server utilizzando i tipi di dati definiti da OLE DB seguenti, registrati nelle funzioni IColumnsInfo::GetColumnInfo e ICommandWithParameters::GetParameterInfo.
Tipo di dati SQL Server |
Tipo di dati 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 |
Il provider OLE DB di SQL Server Native Client supporta le conversioni di dati richieste dal consumer, come mostrato nell'illustrazione.
Gli oggetti sql_variant possono contenere dati di qualsiasi tipo di dati di SQL Server, ad eccezione di text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, timestamp e dei tipi CLR definiti dall'utente di Microsoft .NET Framework. Per un'istanza di dati sql_variant, inoltre, il tipo di dati di base sottostante non può corrispondere a sql_variant. La colonna può ad esempio contenere valori smallint per alcune righe, valori float per altre righe e valori char/nchar per la parte restante delle righe.
Nota
Il tipo di dati sql_variant è simile al tipo Variant di Microsoft Visual Basic® e ai tipi DBTYPE_VARIANT e DBTYPE_SQLVARIANT di OLE DB.
Quando i dati sql_variant vengono recuperati come DBTYPE_VARIANT, vengono inseriti in una struttura VARIANT nel buffer. Tuttavia i sottotipi presenti nella struttura VARIANT non possono eseguire il mapping a sottotipi definiti nel tipo di dati sql_variant. Perché tutti i sottotipi siano corrispondenti, è necessario che i dati sql_variant vengano quindi recuperati come DBTYPE_SQLVARIANT.
Tipo di dati DBTYPE_SQLVARIANT
Per supportare il tipo di dati sql_variant, il provider OLE DB di SQL Server Native Client espone un tipo di dati specifico del provider denominato DBTYPE_SQLVARIANT. Quando i dati sql_variant vengono recuperati come DBTYPE_SQLVARIANT, vengono archiviati in una struttura SSVARIANT specifica del provider. La struttura SSVARIANT contiene tutti i sottotipi che corrispondono ai sottotipi del tipo di dati sql_variant.
La proprietà di sessione SSPROP_ALLOWNATIVEVARIANT deve essere inoltre impostata su TRUE.
Proprietà SSPROP_ALLOWNATIVEVARIANT specifica del provider
Durante il recupero dei dati è possibile specificare in modo esplicito il tipo di dati da restituire per una colonna o un parametro. È inoltre possibile servirsi di IColumnsInfo per ottenere le informazioni sulle colonne da utilizzare per definire l'associazione. Quando IColumnsInfo viene utilizzato a tale scopo, se la proprietà di sessione SSPROP_ALLOWNATIVEVARIANT è FALSE (valore predefinito), viene restituito DBTYPE_VARIANT per le colonne sql_variant. Se la proprietà SSPROP_ALLOWNATIVEVARIANT è FALSE, DBTYPE_SQLVARIANT non è supportato. Se la proprietà SSPROP_ALLOWNATIVEVARIANT è impostata su TRUE, il tipo di colonna viene restituito come DBTYPE_SQLVARIANT, nel qual caso il buffer conterrà la struttura SSVARIANT. Durante il recupero dei dati sql_variant come DBTYPE_SQLVARIANT la proprietà di sessione SSPROP_ALLOWNATIVEVARIANT deve essere impostata su TRUE.
La proprietà SSPROP_ALLOWNATIVEVARIANT fa parte del set di proprietà DBPROPSET_SQLSERVERSESSION specifico del provider ed è una proprietà di sessione.
La proprietà DBTYPE_VARIANT si applica a tutti gli altri provider OLE DB.
SSPROP_ALLOWNATIVEVARIANT
La proprietà SSPROP_ALLOWNATIVEVARIANT è una proprietà di sessione e fa parte del set di proprietà DBPROPSET_SQLSERVERSESSION.
SSPROP_ALLOWNATIVEVARIANT |
Tipo: VT_BOOL L/S: Lettura/Scrittura Impostazione predefinita: VARIANT_FALSE Descrizione: determina se i dati recuperati appartengono alla categoria DBTYPE_VARIANT o DBTYPE_SQLVARIANT. VARIANT_TRUE: il tipo di colonna viene restituito come DBTYPE_SQLVARIANT e in tal caso il buffer conserva la struttura SSVARIANT. VARIANT_FALSE: il tipo di colonna viene restituito come DBTYPE_VARIANT e il buffer presenta la struttura VARIANT. |