參數和資料列集中繼資料

本主題提供有關下列與 OLE DB 日期和時間增強功能相關之類型和類型成員的資訊。

  • DBBINDING 結構

  • ICommandWithParameters::GetParameterInfo

  • ICommandWithParameters::SetParameterInfo

  • IColumnsRowset::GetColumnsRowset

  • IColumnsInfo::GetColumnInfo

ICommandWithParameters::GetParameterInfo

下列資訊會以 DBPARAMINFO 結構透過 prgParamInfo 傳回:

參數類型

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

設定

請注意,在某些情況下值的範圍並不是連續的。 這是當小數有效位數大於零時增加的小數點所導致。

只有連接到 SQL Server 2008 (或更新版本) 伺服器時,DBPARAMFLAGS_SS_ISVARIABLESCALE 才有效。 連接到下層伺服器時,永遠不會設定 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 的設定正確。 從 MDAC 升級的應用程式和從 SQL Server 2005 升級的 SQL Server Native Client 如果有使用 "DBTYPE_DBTIMESTAMP",但沒有正確設定 bScale,就會失敗。 連接到 SQL Server 2008 之前版本的伺服器執行個體時,bScale 值如果不是 0 或 3 且具有 "DBTYPE_DBTIMESTAMP",便是錯誤且會傳回 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 對 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 也必須用來識別伺服器類型。

只有連接到 SQL Server 2008 (或更新版本) 伺服器時,DBCOLUMNFLAGS_SS_ISVARIABLESCALE 才有效。 連接到下層伺服器時,不會定義 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 對 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 也必須用來識別伺服器類型。

請參閱

概念

中繼資料 (OLE DB)