次の方法で共有


データ型のマッピングと注意点

クライアントとサーバーの同期の場合、Sync Framework は、ADO.NET を使用することで、SQL Server Compact 3.5 SP1 の有効なデータ型にマップできるサーバーのデータ型をサポートします。次の表に、既定でどのように型がマップされるかを示します。最初の 2 つのテーブルは、ADO.NET と SQL Server Compact の間のマッピングを示します。3 番目のテーブルは、SQL Server 2008 と SQL Server Compact の間のマッピングを示します。これらのマッピングが可能なのは、SQL Server の 2 つのバージョン間で同じデータ型が多数共有されるためです。アプリケーションで異なるマッピングが必要な場合は、SyncSchemaColumn オブジェクトを使用して型をマップします。このオブジェクトの使用例については、「クライアント データベースを初期化してテーブル スキーマを操作する方法」を参照してください。

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 SP1 のデータ型

bigint

bigint

binary(n)

varbinary

bit

bit

char(n)

nchar(n) またはntext

データの長さが 4,000 文字以下の場合は、nchar が使用されます。それ以外の場合は、ntext が使用されます。

CLR ユーザー定義型

サポートされていません。

date

nchar(27) 値 ('YYYY-MM-DD' 形式)1

datetime

datetime

datetime2

nchar(27) 値 ('YYYY-MM-DD hh:mm:ss.nnnnnnn' 形式)1

datetimeoffset

nvarchar(34) 値 ('YYYY-MM-DD hh:mm:ss.nnnnnnn [+/-] hh:mm' 形式)1、2

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

nvarchar(16) 値 ('hh:mm:ss.nnnnnnn' 形式)1

tinyint

tinyint

uniqueidentifier

uniqueidentifier

varbinary(n)

varbinary(n)

varbinary(max)

image

データの長さが 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 が利用可能である必要があります。クライアント上での datetimeoffset の自動変換は、.NET Compact Framework 2.0 SP1 または .NET Compact Framework 3.5 でサポートされていません。

3 これらの型を同期するには、サーバー上で SyncSchemaColumn オブジェクトを使用して varbinary(max) または image に変換します。このオブジェクトの使用例については、「クライアント データベースを初期化してテーブル スキーマを操作する方法」を参照してください。

マッピングに関する注意点

Sync Framework では、データ型に関して次の動作が見られます。

  • timestamp データ型の列のデータは、サーバーからコピーされません。timestamp 列は同期中に binary(8) データ型にマップされます。これは、timestamp 型のデータは、通常、このデータが作成されたデータベースのみで意味を持つためです。

  • ROWGUID 列はサーバーからクライアント データベースにコピーされますが、SQL Server の ROWGUIDCOL プロパティはコピーされません。このプロパティの設定方法の例については、「クライアント データベースを初期化してテーブル スキーマを操作する方法」を参照してください。

  • ID 列はサーバーからクライアント データベースにコピーされますが、IDENTITY シードと IDENTITY インクリメントはそれぞれ、常に、0 および 1 に設定されます。これは、サーバー データベースでのプロパティの設定方法に関係ありません。SQL Server Compact の ID 列のデータ型は、int または bigint である必要があります。SQL Server Compact の ID 列のデータ型は、smallinttinyintdecimal、または numeric にすることはできません。ID 列の詳細については、「分散環境に適切な主キーの選択」を参照してください。

  • 計算列はダウンロード中にクライアント データベースにコピーされますが、計算列のプロパティはコピーされません。アップロード時に挿入操作が失敗する可能性があるため、双方向とアップロードのシナリオでは計算列を使用しないことをお勧めします。この問題を回避するには、データセットから計算列を除外します。これには、データを取得する際に使用する SELECT ステートメントの WHERE 句に計算列を含めないようにします。フィルター選択の詳細については、「行および列をフィルター選択する方法」を参照してください。

参照

概念

アプリケーションのデザインと配置に関する注意点