パラメーターと行セットのメタデータ
このトピックでは、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 も使用する必要があります。