パラメータと行セットのメタデータ

このトピックでは、SQL Server 2008 における OLE DB の日付および時刻の機能強化に関連する、次の型と型メンバについて説明します。

  • DBBINDING 構造体

  • ICommandWithParameters::GetParameterInfo

  • ICommandWithParameters::SetParameterInfo

  • IColumnsRowset::GetColumnsRowset

  • IColumnsInfo::GetColumnInfo

ICommandWithParameters::GetParameterInfo

prgParamInfo を使用して DBPARAMINFO 構造体に次の情報が返されます。

パラメータの型

wType

ulParamSize

bPrecision

bScale

dwFlags

DBPARAMFLAGS_SS_ISVARIABLESCALE

date

DBTYPE_DBDATE

6

10

0

オフ

time

DBTYPE_DBTIME2

10

8, 10..16

0..7

オン

smalldatetime

DBTYPE_DBTIMESTAMP

16

16

0

オフ

datetime

DBTYPE_DBTIMESTAMP

16

23

3

オフ

datetime2

DBTYPE_DBTIMESTAMP

16

19,21..27

0..7

オン

datetimeoffset

DBTYPE_DBTIMESTAMPOFFSET

20

26,28..34

0..7

オン

場合によっては、値の範囲が連続していないことに注意してください。有効桁数が 0 より大きい場合は、小数点が追加されるためです。

DBPARAMFLAGS_SS_ISVARIABLESCALE は、SQL Server 2008 サーバーに接続されている場合にのみ有効です。下位レベルのサーバーに接続されている場合は、DBPARAMFLAGS_SS_ISVARIABLESCALE は設定されません。

ICommandWithParameters::SetParameterInfo と暗黙のパラメータの型

DBPARAMBINDINFO 構造体で提供される情報は、次の表に準拠する必要があります。

pwszDataSourceType

(プロバイダ固有)

pwszDataSourceType

(OLE DB 汎用)

ulParamSize

bScale

 

DBTYPE_DATE

6

無視

date

DBTYPE_DBDATE

6

無視

 

DBTYPE_DBTIME

10

無視

time

DBTYPE_DBTIME2

10

0..7

smalldatetime

 

16

無視

datetime

 

16

無視

datetime2 または DBTYPE_DBTIMESTAMP

DBTYPE_DBTIMESTAMP

16

0..7

datetimeoffset

DBTYPE_DBTIMESTAMPOFFSET

20

0..7

bPrecision パラメータは無視されます。

データをサーバーに送信する場合、"DBPARAMFLAGS_SS_ISVARIABLESCALE" は無視されます。アプリケーションでは、プロバイダ固有の型名 "datetime" および "smalldatetime" を使用して、従来の表形式のデータ ストリーム (TDS) の型を強制的に使用することができます。SQL Server 2008 (以降の) サーバーに接続されている場合、"datetime2" 形式が使用され、型名が "datetime2" または "DBTYPE_DBTIMESTAMP" の場合は、必要に応じて、暗黙的なサーバー変換が発生します。プロバイダ固有の型名に "datetime" または "smalldatetime" が使用されている場合は、bScale が無視されます。それ以外の場合は、アプリケーションで bScale が正しく設定されるようにする必要があります。"DBTYPE_DBTIMESTAMP" を使用する SQL Server 2005 の MDAC および SQL Server Native Client からアップグレードされたアプリケーションは、bScale が正しく設定されていない場合に失敗します。SQL Server 2008 より前のサーバー インスタンスに接続されている場合は、"DBTYPE_DBTIMESTAMP" で 0 または 3 以外に設定された bScale の値はエラーになり、E_FAIL が返されます。

ICommandWithParameters::SetParameterInfo が呼び出されない場合、プロバイダは、次のように、IAccessor::CreateAccessor で指定されたバインドの種類を基にサーバーの種類を示します。

バインドの種類

pwszDataSourceType

(プロバイダ固有)

DBTYPE_DATE

datetime2(0)

DBTYPE_DBDATE

date

DBTYPE_DBTIME

time(0)

DBTYPE_DBTIME2

time(7)

DBTYPE_DBTIMESTAMP

datetime2(7)

DBTYPE_DBTIMESTAMPOFFSET

datetimeoffset(7)

IColumnsRowset::GetColumnsRowset

IColumnsRowset::GetColumnsRowset は次の列を返します。

列の型

DBCOLUMN_TYPE

DBCOLUM_COLUMNSIZE

DBCOLUMN_PRECISION

DBCOLUMN_SCALE、DBCOLUMN_DATETIMEPRECISION

DBCOLUMN_FLAGS、DBCOLUMNFLAGS_SS_ISVARIABLESCALE

date

DBTYPE_DBDATE

6

10

0

オフ

time

DBTYPE_DBTIME2

10

8, 10..16

0..7

オン

smalldatetime

DBTYPE_DBTIMESTAMP

16

16

0

オフ

datetime

DBTYPE_DBTIMESTAMP

16

23

3

オフ

datetime2

DBTYPE_DBTIMESTAMP

16

19, 21..27

0..7

オン

datetimeoffset

DBTYPE_DBTIMESTAMPOFFSET

20

26, 28..34

0..7

オン

DBCOLUMN_FLAGS では、DBCOLUMNFLAGS_ISFIXEDLENGTH は日付/時刻型に対して常に true になり、次のフラグは常に false になります。

  • DBCOLUMNFLAGS_CACHEDEFERRED

  • DBCOLUMNFLAGS_ISBOOKMARK

  • DBCOLUMNFLAGS_ISCHAPTER

  • DBCOLUMNFLAGS_ISLONG

  • DBCOLUMNFLAGS_ISROWID

  • DBCOLUMNFLAGS_ISROWVER

  • DBCOLUMNFLAGS_MAYDEFER

その他のフラグ (DBCOLUMNFLAGS_ISNULLABLE、DBCOLUMNFLAGS_MAYBENULL、DBCOLUMNFLAGS_WRITE、および DBCOLUMNFLAGS_WRITEUNKNOWN) は、列の定義方法と実際のクエリに応じて設定できます。

DBCOLUMN_FLAGS に用意されている新しいフラグ DBCOLUMNFLAGS_SS_ISVARIABLESCALE を使用すると、アプリケーションは、DBCOLUMN_TYPE が DBTYPE_DBTIMESTAMP である列のサーバーの種類を判断できます。サーバーの種類を識別するには、DBCOLUMN_SCALE または DBCOLUMN_DATETIMEPRECISION も使用する必要があります。

DBCOLUMNFLAGS_SS_ISVARIABLESCALE は SQL Server 2008 サーバーに接続されている場合にのみ有効です。下位レベルのサーバーに接続されている場合、DBCOLUMNFLAGS_SS_ISVARIABLESCALE は未定義となります。

IColumnsInfo::GetColumnInfo

DBCOLUMNINFO 構造体から次の情報が返されます。

パラメータの型

wType

ulColumnSize

bPrecision

bScale

dwFlags

DBPARAMFLAGS_SS_ISVARIABLESCALE

date

DBTYPE_DBDATE

6

10

0

オフ

time(1..7)

DBTYPE_DBTIME2

10

8, 10..16

0..7

オン

smalldatetime

DBTYPE_DBTIMESTAMP

16

16

0

オフ

datetime

DBTYPE_DBTIMESTAMP

16

23

3

オフ

datetime2

DBTYPE_DBTIMESTAMP

16

19, 21..27

0..7

オン

datetimeoffset

DBTYPE_DBTIMESTAMPOFFSET

20

26, 28..34

0..7

オン

dwFlags では、DBCOLUMNFLAGS_ISFIXEDLENGTH は日付/時刻型に対して常に true になり、次のフラグは常に false になります。

  • DBCOLUMNFLAGS_CACHEDEFERRED

  • DBCOLUMNFLAGS_ISBOOKMARK

  • DBCOLUMNFLAGS_ISCHAPTER

  • DBCOLUMNFLAGS_ISLONG

  • DBCOLUMNFLAGS_ISROWID

  • DBCOLUMNFLAGS_ISROWVER、MAYDEFER

その他のフラグ (DBCOLUMNFLAGS_ISNULLABLE、DBCOLUMNFLAGS_MAYBENULL、DBCOLUMNFLAGS_WRITE、および DBCOLUMNFLAGS_WRITEUNKNOWN) は、設定することができます。

dwFlags に用意されている新しいフラグ DBCOLUMNFLAGS_SS_ISVARIABLESCALE を使用すると、アプリケーションは、wType が DBTYPE_DBTIMESTAMP である列のサーバーの種類を判断できます。サーバーの種類を識別するには、bScale も使用する必要があります。

関連項目

概念