Сопоставление типов данных и связанные с этим вопросы

Для синхронизации клиента и сервера платформа Sync Framework поддерживает серверные типы данных, которые могут быть сопоставлены с допустимыми типами данных в SQL Server Compact 3.5 с пакетом обновления 1 (SP1) с помощью ADO.NET. В следующей таблице показано, как сопоставляются типы данных по умолчанию. В первых двух таблицах показано сопоставление между ADO.NET и SQL Server Compact. В третьей таблице показано сопоставление между SQL Server 2008 и SQL Server Compact. Такое сопоставление возможно благодаря тому, что эти две версии SQL Server поддерживают много общих типов данных. Если приложению необходимо иное сопоставление, воспользуйтесь объектом 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 с пакетом обновления 1

bigint

bigint

binary(n)

varbinary

bit

bit

char(n)

nchar(n) или ntext

Если длина данных не превышает 4000 символов, то используется тип nchar, в противном случае — тип ntext.

Определяемый пользователем тип данных CLR

Не поддерживается.

date

Значение nchar(27) вида «ГГГГ-ММ-ДД» 1

datetime

datetime

datetime2

Значение nchar(27) вида «ГГГГ-ММ-ДД чч:мм:сс.ннннннн» 1

datetimeoffset

Значение nvarchar(34) вида «ГГГГ-ММ-ДД чч:мм:сс.ннннннн [+/-] чч:мм» 1,2

decimal

Не поддерживается; используйте numeric.

double

double

float

float

geography

Не преобразуется в Sync Framework3

geometry

Не преобразуется в Sync Framework3

hierarchyid

Не преобразуется в Sync Framework3

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 содержатся двоичные данные, размер этих данных в байтах должен быть кратен 2. В противном случае возникнет ошибка преобразования.

text

ntext

Если длина текстовых данных превышает 1 073 741 823 символа, то синхронизация завершается с ошибкой.

time

Значение nvarchar(16) вида «чч:мм:сс:ннннннн» 1

tinyint

tinyint

uniqueidentifier

uniqueidentifier

varbinary(n)

varbinary(n)

varbinary(max)

image

Если длина данных превышает длину столбца типа image, синхронизация завершается с ошибкой.

varchar(n)

nvarchar(n) или ntext

Если длина данных не превышает 4000 символов, то используется тип nvarchar, в противном случае — тип ntext.

varchar(max)

ntext

Если длина данных превышает длину столбца ntext, то синхронизация завершается ошибкой.

xml

ntext

1 При работе с приведенными ниже форматами даты и времени помните о следующих проблемах.

  • Если поставщик сервера находится на компьютере, где работает среда ADO.NET 2.0, то эти типы преобразуются на сервере. Если поставщик сервера размещается на компьютере, где запущена среда ADO.NET 2.0 с пакетом обновления 1 (SP1), то типы отправляются на клиент и преобразуются там.

  • На клиенте и на сервере значения могут рассматриваться по-разному. Например, для столбца типа datetime2 на сервере значения «0001-01-01 00:00:00.0000000» и «0001-01-01 12:00 AM» одинаковы. На клиенте значения рассматриваются как разные строки. Это влечет за собой ряд последствий.

    • Столбцы этих типов не следует использовать в первичных ключах.

    • Столбцы этих типов должны обрабатываться на клиенте как доступные только для чтения. Исключение составляет случай, когда приложение гарантирует контроль форматирования значений.

2 Если поставщик сервера находится на компьютере, где запущена среда ADO.NET 2.0 с пакетом обновления 1, то для успешного преобразования среда ADO.NET 2.0 с пакетом обновления 1 должна также быть на клиенте. Автоматическое преобразование datetimeoffset на клиенте в среде .NET Compact Framework 2.0 с пакетом обновления 1 или .NET Compact Framework 3.5 не поддерживается.

3 Чтобы синхронизировать эти типы, их можно преобразовать в varbinary(max) или image на сервере с помощью объекта SyncSchemaColumn. Соответствующий пример см. в разделе Как инициализировать клиентскую базу данных и работать со схемой таблицы.

Вопросы, связанные с сопоставлением

Службы Sync Framework обращаются с типами данных следующим образом.

  • Данные из столбцов, имеющих тип timestamp, с сервера не копируются. Столбцы типа timestamp в процессе синхронизации сопоставляются с типом данных binary(8) . Это объясняется тем, что данные timestamp обычно имеют смысл только в той базе данных, в которой они созданы.

  • Столбцы ROWGUID копируются с сервера в клиентскую базу данных, а свойство SQL Server ROWGUIDCOL — нет. Пример установки этого свойства см. в разделе Как инициализировать клиентскую базу данных и работать со схемой таблицы.

  • Столбцы идентификаторов копируются с сервера в клиентскую базу данных, но начальное значение и шаг идентификатора всегда устанавливаются в значения 0 и 1 соответственно. При этом значения, назначенные свойствам в базе данных сервера, не учитываются. Столбцы идентификаторов SQL Server Compact должны иметь тип данных int или bigint. Столбцы идентификаторов SQL Server Compact не могут иметь тип данных smallint, tinyint, decimal или numeric. Дополнительные сведения о столбцах идентификаторов см. в разделе Выбор подходящего первичного ключа для распределенной среды.

  • Вычисляемые столбцы в процессе загрузки копируются с сервера в клиентскую базу данных, а свойства вычисляемых столбцов — нет. Не рекомендуется использовать вычисляемые столбцы при передаче и двунаправленной синхронизации, так как при передаче на сервер операция вставки может завершиться ошибкой. Чтобы избежать этой проблемы, отфильтруйте эти столбцы из набора данных, исключив их из предложения WHERE в инструкциях SELECT, используемых для получения данных. Дополнительные сведения о фильтрации см. в разделе Как фильтровать строки и столбцы.

См. также

Другие ресурсы

Рекомендации по разработке и развертыванию приложений