Сопоставление типов данных и связанные с этим вопросы
Для синхронизации клиента и сервера платформа 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, используемых для получения данных. Дополнительные сведения о фильтрации см. в разделе Как фильтровать строки и столбцы.