行セットとパラメータでのデータ型マッピング
SQL Server Native Client OLE DB プロバイダでは、OLE DB で定義される次のデータ型を使用して、行セット内やパラメータ値として、SQL Server データを表します。これらのデータ型は、関数 IColumnsInfo::GetColumnInfo と ICommandWithParameters::GetParameterInfo で報告されます。
SQL Server データ型 |
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 |
SQL Server Native Client OLE DB プロバイダでは、次の図に示すように、コンシューマが要求するデータ変換をサポートします。
sql_variant オブジェクトは、text、ntext、image、varchar(max)、nvarchar(max)、varbinary(max)、xml、timestamp、および Microsoft .NET Framework 共通言語ランタイム (CLR) のユーザー定義型を除く、任意の SQL Server データ型のデータを保持できます。また、sql_variant データのインスタンスは、その基になる基本データ型として sql_variant を保持できません。たとえば、一部の行の列に smallint 型の値を格納し、他の行の列に float 型の値を格納して、残りの行の列に char/nchar 型の値を格納できます。
注意 |
|---|
sql_variant データ型は、Microsoft Visual Basic® の Variant データ型や、OLE DB の DBTYPE_VARIANT および DBTYPE_SQLVARIANT に似ています。 |
sql_variant 型のデータを DBTYPE_VARIANT としてフェッチすると、このデータはバッファの VARIANT 構造体内に格納されます。ただし、VARIANT 構造体内のサブタイプは、sql_variant データ型で定義されているサブタイプにマップされない場合があります。このため、すべてのサブタイプを一致させるには、sql_variant 型のデータを DBTYPE_SQLVARIANT としてフェッチする必要があります。
DBTYPE_SQLVARIANT データ型
SQL Server Native Client OLE DB プロバイダでは、sql_variant データ型をサポートするために、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 R/W: 読み取り/書き込み 既定値 : VARIANT_FALSE 説明 : データを DBTYPE_VARIANT と DBTYPE_SQLVARIANT のどちらとしてフェッチするかを決定します。 VARIANT_TRUE: 列の型は DBTYPE_SQLVARIANT として返され、バッファには SSVARIANT 構造体が保持されます。 VARIANT_FALSE: 列の型は DBTYPE_VARIANT として返され、バッファには VARIANT 構造体が保持されます。 |
注意