本主題提供與 OLE DB 日期和時間增強功能相關的下列類型和類型成員的相關信息。
DBBINDING 結構
ICommandWithParameters::GetParameterInfoICommandWithParameters::SetParameterInfoIColumnsRowset::GetColumnsRowsetIColumnsInfo::GetColumnInfo
ICommandWithParameters::GetParameterInfo
下列資訊會以 DBPARAMINFO 結構透過 prgParamInfo 傳回:
| 參數類型 | 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 | 晴 |
| 日期時間 | DBTYPE_DBTIMESTAMP | 16 | 23 | 3 | 晴 |
| datetime2 | DBTYPE_DBTIMESTAMP | 16 | 19,21..27 | 0..7 | 設定 |
| datetimeoffset(日期時間偏移量) | DBTYPE_DBTIMESTAMPOFFSET | 20 | 26,28..34 | 0..7 | 設定 |
請注意,在某些情況下值的範圍並不是連續的。 這是當小數有效位數大於零時增加的小數點所導致。
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 | 已忽略 | |
| 日期時間 | 16 | 已忽略 | |
| datetime2 或 DBTYPE_DBTIMESTAMP | DBTYPE_DBTIMESTAMP | 16 | 0..7 |
| datetimeoffset(日期時間偏移量) | DBTYPE_DBTIMESTAMPOFFSET | 20 | 0..7 |
已忽略 bPrecision 參數。
當傳送資料到伺服器時,"DBPARAMFLAGS_SS_ISVARIABLESCALE" 會被忽略。 應用程式可以使用提供者特定的類型名稱 「和」datetimesmalldatetime,強制使用舊版表格式數據流 (TDS) 類型。 連接到 SQL Server 2008(或更新版本)伺服器時,將會使用 「datetime2格式,並在必要時,在類型名稱為 」datetime2」 或 「DBTYPE_DBTIMESTAMP」 時,會發生隱含伺服器轉換。 如果使用提供者特定的類型名稱 「datetime或 」「 或」smalldatetime ,則會忽略 bScale。 否則,appications 必須確定 bScale 已正確設定。 若應用程式未正確設定 bScale ,則從使用 「DBTYPE_DBTIMESTAMP」 的 SQL Server 2005 升級自 MDAC 和 SQL Server Native Client 的應用程式將會失敗。 聯機到 SQL Server 2008 之前的伺服器實例時,會傳回 0 或 3 以外的 bScale 值,並出現「DBTYPE_DBTIMESTAMP」錯誤,並傳回E_FAIL。
未呼叫 ICommandWithParameters::SetParameterInfo 時,提供者會依照 IAccessor::CreateAccessor::CreateAccessor 中指定的系結類型,將伺服器類型隱含在下列專案上:
| 繫結類型 |
pwszDataSourceType (提供者特定) |
|---|---|
| DBTYPE_DATE | datetime2(0) |
| DBTYPE_DBDATE | 日期 |
| DBTYPE_DBTIME | time(0) |
| DBTYPE_DBTIME2 | 時間(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 | 晴 |
| 日期時間 | 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 對 date/time 類型永遠為 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 | 晴 |
| 日期時間 | 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 對 date/time 類型永遠為 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 也必須用來識別伺服器類型。