資料類型對應及考量
進行用戶端與伺服器同步處理時,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 識別欄位必須有 int 或 bigint 資料類型。SQL Server Compact 識別欄位不能具有 smallint、tinyint、decimal 或 numeric 資料類型。如需識別資料行的詳細資訊,請參閱為分散式環境選取適當的主索引鍵。
計算資料行會在下載期間複製到用戶端資料庫,但是計算資料行屬性不複製。建議您不要將計算資料行使用於雙向和上傳案例中,因為插入作業可能會在上傳時失敗。若要避免這個問題,不要將資料行包含於用來擷取資料之 SELECT 陳述式的 WHERE 子句中,從資料集中篩選剔出資料行。如需篩選的詳細資訊,請參閱 HOW TO:篩選資料列和資料行。