共用方式為


從伺服器到用戶端執行的轉換

本主題描述在 SQL Server 2008 (或更新版本) 和以 SQL Server Native Client OLE DB 撰寫之用戶端應用程式之間執行的日期/時間轉換。

轉換

下表描述傳回用戶端之類行與繫結中之類型之間的轉換。 對於輸出參數,如果已經呼叫 ICommandWithParameters::SetParameterInfo,而且在 pwszDataSourceType 中指定的類型與伺服器上的實際類型不符,伺服器將會執行隱含轉換,而且傳回用戶端的類型將會與透過 ICommandWithParameters::SetParameterInfo 指定的類型相符。 當伺服器的轉換規則與本主題中描述的規則不同時,這可能會導致非預期的轉換結果。 例如,必須提供預設日期時,SQL Server 會使用 1900-1-1 而非 1899-12-30。

To ->

DATE

DBDATE

DBTIME

DBTIME2

DBTIMESTAMP

DBTIMESTAMPOFFSET

FILETIME

BYTES

VARIANT

SSVARIANT

BSTR

STR

WSTR

Date

1,7

OK

-

-

1

1,3

1,7

-

OK (VT_BSTR)

OK

OK

4

4

Time

5,6,7

-

9

OK

6

3,6

5,6

-

OK (VT_BSTR)

OK

OK

4

4

Smalldatetime

7

8

9,10

10

OK

3

7

-

7 (VT_DATE)

OK

OK

4

4

Datetime

5,7

8

9,10

10

OK

3

7

-

7 (VT_DATE)

OK

OK

4

4

Datetime2

5,7

8

9,10

10

7

3

5,7

-

OK (VT_BSTR)

OK

OK

4

4

Datetimeoffset

5,7,11

8,11

9,10,11

10,11

7,11

OK

5,7,11

-

OK (VT_BSTR)

OK

OK

4

4

Char, Varchar,

Nchar, Nvarchar

7, 13

12

12,9

12

12

12

7,13

N/A

N/A

N/A

N/A

N/A

N/A

Sql_variant

(datetime)

7

8

9,10

10

OK

3

7

-

7 (VT_DATE)

OK

OK

4

4

Sql_variant

(smalldatetime)

7

8

9,10

10

OK

3

7

-

7 (VT_DATE)

OK

OK

4

4

Sql_variant

(date)

1,7

OK

2

2

1

1,3

1,7

-

OK(VT_BSTR)

OK

OK

4

4

Sql_variant

(time)

5,6,7

2

6

OK

6

3,6

5,6

-

OK(VT_BSTR)

OK

OK

4

4

Sql_variant

(datetime2)

5,7

8

9,10

10

OK

3

5,7

-

OK(VT_BSTR)

OK

OK

4

4

Sql_variant

(datetimeoffset)

5,7,11

8,11

9,10,11

10,11

7,11

OK

5,7,11

-

OK(VT_BSTR)

OK

OK

4

4

符號的索引鍵

符號

意義

OK

不需要任何轉換。

-

不支援轉換。 如果繫結在呼叫 IAccessor::CreateAccessor 時經過驗證,會在 rgStatus 中傳回 DBBINDSTATUS_UPSUPPORTEDCONVERSION。 當存取子驗證延遲時,會設定 DBSTATUS_E_BADACCESSOR。

1

時間欄位會設定為零。

2

DBSTATUS_E_CANTCONVERTVALUE 已設定。

3

時區會設定為零。

4

如果用戶端緩衝區不夠大,會設定 DBSTATUS_S_TRUNCATED。 當伺服器類型包含小數秒時,結果字串中的位數會完全符合伺服器類型的小數位數。

5

截斷的秒數或小數秒數會被忽略。

6

除非來源為字串時間常值,而且目的地為 DBTYPE_DATE,否則日期會設定為目前的日期。 在此情況下,會使用 1899-12-30。

7

如果值溢位,會設定 DBSTATUS_E_DATAOVERFLOW。

8

忽略時間欄位。

9

忽略小數秒欄位。

10

忽略日期元件。

11

時間會轉換成用戶端時區。 如果此轉換期間發生錯誤,則會設定 DBSTATUS_E_DATAOVERFLOW。

12

此字串會剖析為 ISO 常值,並轉換為目標類型。 如果失敗,字串會剖析為 OLE 日期常值 (也有時間元件),並從 OLE 日期 (DBTYPE_DATE) 轉換為目標類型。 字串必須符合進行 ISO 格式剖析所允許之目標類型常值的語法才會成功。 若要讓 OLE 剖析成功,字串必須符合 OLE 所識別的語法。 如果無法剖析字串,則會設定 DBSTATUS_E_CANTCONVERTVALUE。 如果任何元件值超出範圍,會設定 DBSTATUS_E_DATAOVERFLOW。

13

此字串會剖析為 ISO 常值,並轉換為目標類型。 如果失敗,字串會剖析為 OLE 日期常值 (也有時間元件),並從 OLE 日期 (DBTYPE_DATE) 轉換為目標類型。 除非目的地為 DBTYPE_DATE 或 DBTYPE_DBTIMESTAMP,否則字串必須符合日期時間常值的語法。 如果是這種狀況,ISO 格式剖析允許使用日期時間或時間嘗試才會成功。 若要讓 OLE 剖析成功,字串必須符合 OLE 所識別的語法。 如果無法剖析字串,則會設定 DBSTATUS_E_CANTCONVERTVALUE。 如果任何元件值超出範圍,會設定 DBSTATUS_E_DATAOVERFLOW。

請參閱

概念

繫結和轉換 (OLE DB)