このトピックでは、OLE DB の日付および時刻の機能強化に関連する、次の型と型メンバーについて説明します。
DBBINDING 構造体
ICommandWithParameters::GetParameterInfoICommandWithParameters::SetParameterInfoIColumnsRowset::GetColumnsRowsetIColumnsInfo::GetColumnInfo
ICommandWithParameters::GetParameterInfo
prgParamInfo を使用して DBPARAMINFO 構造体に次の情報が返されます。
| パラメーターの型 | wType | ulParamSize | bPrecision | bScale |
dwFlags DBPARAMFLAGS_SS_ISVARIABLESCALE |
|---|---|---|---|---|---|
| 日付 | DBTYPE_DBDATE | 6 | 10 | 0 | 透明 |
| 時間 | 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 | 無視 | |
| 日付 | DBTYPE_DBDATE | 6 | 無視 |
| DBTYPE_DBTIME | 10 | 無視 | |
| 時間 | 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 | 日付 |
| 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 |
|---|---|---|---|---|---|
| 日付 | DBTYPE_DBDATE | 6 | 10 | 0 | 透明 |
| 時間 | 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 |
|---|---|---|---|---|---|
| 日付 | 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 も使用する必要があります。