資料列集和參數中的資料類型對應
在資料列集和參數值中,SQL Server Native Client OLE DB 提供者會藉由使用下列 OLE DB 定義的資料類型 (在 IColumnsInfo::GetColumnInfo 和 ICommandWithParameters::GetParameterInfo 函數中報告的) 來代表 SQL Server 資料。
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 |
UDT |
DBTYPE_UDT |
uniqueidentifier |
DBTYPE_GUID |
varbinary |
DBTYPE_BYTES |
varchar |
DBTYPE_STR |
XML |
DBTYPE_XML |
SQL Server Native Client OLE DB 提供者支援取用者要求的資料轉換,如圖中所示。
sql_variant 物件可保存任何 SQL Server 資料類型的資料,下列類型除外:text、ntext、image、varchar(max)、nvarchar(max)、varbinary(max)、xml、timestamp 和 Microsoft .NET Framework Common Language Runtime (CLR) 使用者定義的類型。 sql_variant 資料的執行個體不能用 sql_variant 做為它的基礎基底資料類型。 例如,資料行可以在某些資料列中包含 smallint 值,在其他資料列中包含 float 值,而在剩餘的資料列中包含 char/nchar 值。
[!附註]
sql_variant 資料類型類似於 Microsoft Visual Basic® 中的 Variant 資料類型,以及 OLEDB 中的 DBTYPE_VARIANT、DBTYPE_SQLVARIANT。
以 DBTYPE_VARIANT 提取 sql_variant 資料時,會將該資料置於緩衝區中的 VARIANT 結構中, 但是 VARIANT 結構中的子類型可能不會對應到定義於 sql_variant 資料類型中的子類型。 接下來必須以 DBTYPE_SQLVARIANT 提取 sql_variant 資料,才能讓所有的子類型相互對應。
DBTYPE_SQLVARIANT 資料類型
若要支援 sql_variant 資料類型,SQL Server Native Client OLE DB 提供者會公開稱為 DBTYPE_SQLVARIANT 的提供者特定資料類型。 以 DBTYPE_SQLVARIANT 提取 sql_variant 資料時,該資料會儲存在提供者特定的 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 結構。 以 DBTYPE_SQLVARIANT 提取 sql_variant 資料時,工作階段屬性 SSPROP_ALLOWNATIVEVARIANT 必須設定為 TRUE。
SSPROP_ALLOWNATIVEVARIANT 屬性是提供者特定之 DBPROPSET_SQLSERVERSESSION 屬性集的一部分,而且是工作階段屬性。
DBTYPE_VARIANT 適用於所有其他的 OLE DB 提供者。
SSPROP_ALLOWNATIVEVARIANT
SSPROP_ALLOWNATIVEVARIANT 是工作階段屬性,而且是 DBPROPSET_SQLSERVERSESSION 屬性集的一部分。
SSPROP_ALLOWNATIVEVARIANT |
類型:VT_BOOL R/W:讀取/寫入 預設值:VARIANT_FALSE 描述:決定所提取的資料是否為 DBTYPE_VARIANT 或 DBTYPE_SQLVARIANT。 VARIANT_TRUE:資料行類型是以 DBTYPE_SQLVARIANT 傳回,在此種情況下,緩衝區會保存 SSVARIANT 結構。 VARIANT_FALSE:資料行類型是以 DBTYPE_VARIANT 傳回,而且緩衝區將具有 VARIANT 結構。 |