共用方式為


資料類型對應及考量

進行用戶端與伺服器同步處理時,Sync Framework 支援可在 SQL Server Compact 3.5 SP1 中使用 ADO.NET 對應至有效資料類型的伺服器資料類型。下表顯示類型依預設對應的方式。前兩個表顯示 ADO.NET 與 SQL Server Compact 之間的對應。第三個表顯示 SQL Server 2008 與 SQL Server Compact 之間的對應。之所以能夠進行這些對應,是因為這兩個版本的 SQL Server 共用許多相同的資料類型。如果應用程式需要不同的對應,請使用 SyncSchemaColumn 物件對應這些類型。如需如何使用此物件的範例,請參閱 HOW TO:初始化用戶端資料庫及使用資料表結構描述

ADO.NET 與 SQL Server Compact 之間的對應

ADO.NET 資料類型 SQL Server Compact 資料類型

Boolean

bit

Byte

tinyint

Byte[]

varbinary

Char

nchar

DateTime

datetime

Decimal

numeric

Double

float

Int16

smallint

Int32

int

Int64

bigint

SByte

tinyint

Single

real

String

ntext

UInt16

smallint

UInt32

int

UInt64

bigint

SQL Server Compact 資料類型 ADO.NET 資料類型

bigint

Int64

binary

Byte[]

bit

Boolean

datetime

DateTime

float

Double

image

Byte[]

int

Int32

integer

Int32

money

Decimal

nchar

String

ntext

String

numeric

Decimal

nvarchar

String

real

Single

smallint

Int16

timestamp

Byte[]

tinyint

Byte

uniqueidentifier

Guid

varbinary

Byte[]

SQL Server 2008 與 SQL Server Compact 3.5 之間的對應

SQL Server 2008 資料類型 SQL Server Compact 3.5 SP 1 資料類型

bigint

bigint

binary(n)

varbinary

bit

bit

char(n)

nchar(n)ntext

如果資料長度等於或小於 4000 個字元,就使用 nchar,否則使用 ntext

CLR 使用者定義型別

不支援。

date

'YYYY-MM-DD' 1 格式的 nchar(27)

datetime

datetime

datetime2

'YYYY-MM-DD hh:mm:ss.nnnnnnn' 格式的 nchar(27) 值 1

datetimeoffset

'YYYY-MM-DD hh:mm:ss.nnnnnnn [+/-] hh:mm' 1, 2 格式的 nvarchar(34) 值

decimal

不支援,使用 numeric

double

double

float

float

geography

不會由 Sync Framework 3 進行轉換

geometry

不會由 Sync Framework 3 進行轉換

hierarchyid

不會由 Sync Framework 3 進行轉換

image

image

int

int

money

money

nchar(n)

nchar(n)

ntext

ntext

nvarchar(n)

nvarchar(n)

nvarchar(max)

ntext

如果資料長度超過 ntext 資料行的長度,同步處理會失敗。

numeric

numeric

real

real

smalldatetime

datetime

如果 datetime 資料的精準度超過 smalldatetime 資料行的精準度,同步處理會失敗。

smallint

smallint

smallmoney

money

sql_variant

ntext

如果 sql_variant 資料行中有二進位資料存在,此二進位資料必須為偶數位元組,否則就會發生轉換錯誤。

text

ntext

如果文字資料長度超過 1,073,741,823 字元,同步處理會失敗。

time

'hh:mm:ss.nnnnnnn' 1 格式的 nvarchar(16) 值。

tinyint

tinyint

uniqueidentifier

uniqueidentifier

varbinary(n)

varbinary(n)

varbinary(max)

image

如果資料長度超過影像資料行的長度,同步處理會失敗。

varchar(n)

nvarchar(n)ntext

如果資料長度等於或小於 4,000 個字元,就使用 nvarchar,否則使用 ntext

varchar(max)

ntext

如果資料長度超過 ntext 資料行的長度,同步處理會失敗。

xml

ntext

1 請記住這些日期和時間類型有下列問題:

  • 如果伺服器提供者裝載於執行 ADO.NET 2.0 的電腦上,這些類型都會在伺服器上轉換。如果伺服器提供者是裝載於執行 ADO.NET 2.0 SP1 的電腦上,該類型是傳送至用戶端,然後再轉換。

  • 值可以在用戶端與伺服器上以不同方式處理。例如,在伺服器端上有 datetime2 類型的資料行,值 '0001-01-01 00:00:00.0000000' 與 '0001-01-01 12:00 AM' 是相同的。在用戶端上,值是視為不同字串處理。此行為會有下列結果:

    • 這些類型的資料行不應該用於主索引鍵中。

    • 這些類型的資料行應該在用戶端上視為唯讀處理,除非應用程式確保已控制值的格式化。

2 如果伺服器提供者裝載於執行 ADO.NET 2.0 SP1 的電腦上,ADO.NET 2.0 SP1 也必須可在用戶端上使用,轉換才能成功。.NET Compact Framework 2.0 SP1 或 .NET Compact Framework 3.5 不支援在用戶端上自動轉換 datetimeoffset

3 若要同步處理這些類型,您可以使用 SyncSchemaColumn 物件,在伺服器上將這些類型轉換為 varbinary(max)image。如需如何使用此物件的範例,請參閱 HOW TO:初始化用戶端資料庫及使用資料表結構描述

對應考量

Sync Framework 在資料類型上有下列行為:

  • 來自具有 timestamp 資料類型之資料行的資料不會從伺服器複製,在同步處理期間,timestamp 資料行是對應至 binary(8) 資料類型。這是因為 timestamp 資料一般只有在所建立的資料庫中才有意義。

  • ROWGUID 資料行會從伺服器複製到用戶端資料庫,但是不會複製 SQL Server ROWGUIDCOL 屬性。如需如何設定此屬性的範例,請參閱 HOW TO:初始化用戶端資料庫及使用資料表結構描述

  • 識別資料行會從伺服器複製到用戶端資料庫,但是識別種子和遞增值永遠都分別設定為 0 和 1。不論伺服器資料庫中的屬性設定方式如何,都是如此。SQL Server Compact 識別欄位必須有 intbigint 資料類型。SQL Server Compact 識別欄位不能具有 smallinttinyintdecimalnumeric 資料類型。如需識別資料行的詳細資訊,請參閱為分散式環境選取適當的主索引鍵

  • 計算資料行會在下載期間複製到用戶端資料庫,但是計算資料行屬性不複製。建議您不要將計算資料行使用於雙向和上傳案例中,因為插入作業可能會在上傳時失敗。若要避免這個問題,不要將資料行包含於用來擷取資料之 SELECT 陳述式的 WHERE 子句中,從資料集中篩選剔出資料行。如需篩選的詳細資訊,請參閱 HOW TO:篩選資料列和資料行

請參閱

概念

應用程式設計及部署的考量