Mapeamento e considerações sobre tipos de dados
Para a sincronização entre cliente e servidor, o Sync Framework oferece suporte a tipos de dados do servidor que podem ser mapeados para tipos de dados válidos no SQL Server Compact 3.5 SP1 usando o ADO.NET. As tabelas a seguir mostram como os tipos são mapeados por padrão. As duas primeiras tabelas mostram mapeamentos entre o ADO.NET e o SQL Server Compact. A terceira tabela mostra mapeamentos entre o SQL Server 2008 e o SQL Server Compact. Esses mapeamentos são possíveis porque essas duas versões do SQL Server compartilham muitos tipos de dados. Se um aplicativo exigir mapeamentos diferentes, use o objeto SyncSchemaColumn para mapear os tipos. Para obter um exemplo de como usar esse objeto, consulte Como inicializar o banco de dados cliente e trabalhar com esquemas de tabela.
Mapeamentos entre o ADO.NET e o SQL Server Compact
Tipo de dados do ADO.NET | Tipo de dados do 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 |
Tipo de dados do SQL Server Compact | Tipo de dados do 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[] |
Mapeamentos entre o SQL Server 2008 e o SQL Server Compact 3.5
Tipos de dados do SQL Server 2008 | Tipo de dados do SQL Server Compact 3.5 SP 1 |
---|---|
bigint |
bigint |
binary(n) |
varbinary |
bit |
bit |
char(n) |
nchar(n) ou ntext Se o comprimento dos dados for 4.000 caracteres ou menos, será usado nchar; caso contrário, será usado ntext. |
Tipo CLR definido pelo usuário |
Sem suporte. |
date |
Valor nchar(27) no formato 'AAAA-MM-DD' 1 |
datetime |
datetime |
datetime2 |
Valor nchar(27) no formato 'AAAA-MM-DD hh:mm:ss.nnnnnnn' 1 |
datetimeoffset |
Valor nvarchar(34) no formato 'AAAA-MM-DD hh:mm:ss.nnnnnnn [+/-] hh:mm' 1, 2 |
decimal |
Sem suporte; use numeric. |
double |
double |
float |
float |
geography |
Não convertido pelo Sync Framework 3 |
geometry |
Não convertido pelo Sync Framework 3 |
hierarchyid |
Não convertido pelo Sync Framework 3 |
image |
image |
int |
int |
money |
money |
nchar(n) |
nchar(n) |
ntext |
ntext |
nvarchar(n) |
nvarchar(n) |
nvarchar(max) |
ntext Se o comprimento dos dados exceder o comprimento da coluna ntext, a sincronização falhará. |
numeric |
numeric |
real |
real |
smalldatetime |
datetime Se a precisão dos dados datetime exceder a precisão da coluna smalldatetime, a sincronização falhará. |
smallint |
smallint |
smallmoney |
money |
sql_variant |
ntext Se houver dados binários na coluna sql_variant , esses dados deverão ser um número de bytes par ou ocorrerá um erro de conversão. |
text |
ntext Se o comprimento dos dados de texto exceder 1.073.741.823 caracteres, a sincronização falhará. |
time |
Valor nvarchar(16) no formato 'hh:mm:ss.nnnnnnn' 1 |
tinyint |
tinyint |
uniqueidentifier |
uniqueidentifier |
varbinary(n) |
varbinary(n) |
varbinary(max) |
image Se o comprimento dos dados exceder o comprimento da coluna image, a sincronização falhará. |
varchar(n) |
nvarchar(n) ou ntext Se o comprimento dos dados for 4.000 caracteres ou menos, será usado nvarchar; caso contrário, será usado ntext. |
varchar(max) |
ntext Se o comprimento dos dados exceder o comprimento da coluna ntext, a sincronização falhará. |
xml |
ntext |
1 Considere o seguinte para esses tipos de data e hora:
Se o provedor do servidor estiver hospedado em um computador que executa o ADO.NET 2.0, esses tipos serão convertidos no servidor. Se o provedor do servidor estiver hospedado em um computador que executa o ADO.NET 2.0 SP1, os tipos serão enviados ao cliente e convertidos ali.
Os valores podem ser tratados de maneiras diferentes no cliente e no servidor. Por exemplo, com uma coluna do tipo datetime2 no servidor, os valores '0001-01-01 00:00:00.0000000' e '0001-01-01 12:00 AM' são iguais. No cliente, os valores são tratados como cadeias de caracteres distintas. Esse comportamento tem as seguintes consequências:
Colunas desses tipos não devem ser usadas em chaves primárias.
Colunas desses tipos devem ser tratadas como somente leitura no cliente, a menos que o aplicativo assegure que a formatação dos valores seja controlada.
2 Se o provedor do servidor estiver hospedado em um computador que executa o ADO.NET 2.0 SP1, o ADO.NET 2.0 SP1 também deverá estar disponível no cliente para que a conversão seja bem-sucedida. A conversão automática de datetimeoffset no cliente não é suportada pelo .NET Compact Framework 2.0 SP1 nem pelo .NET Compact Framework 3.5.
3 Para sincronizar esses tipos, é possível convertê-los em varbinary(max) ou image no servidor usando o objeto SyncSchemaColumn. Para obter um exemplo de como usar esse objeto, consulte Como inicializar o banco de dados cliente e trabalhar com esquemas de tabela.
Considerações sobre mapeamento
O Sync Framework tem o seguinte comportamento com os tipos de dados:
Os dados das colunas que têm o tipo de dados timestamp não são copiados do servidor. As colunas timestamp são mapeadas para o tipo de dados binary(8) durante a sincronização. Isso ocorre porque os dados timestamp geralmente só são significativos no banco de dados no qual eles foram criados.
As colunas ROWGUID são copiadas do servidor para o banco de dados cliente, mas a propriedade ROWGUIDCOL do SQL Server não é. Para obter um exemplo de como definir essa propriedade, consulte Como inicializar o banco de dados cliente e trabalhar com esquemas de tabela.
As colunas de identidade são copiadas do servidor para o banco de dados cliente, mas a propagação de identidade e o incremento são sempre definidos como 0 e 1, respectivamente. Isso ocorre independentemente de como as propriedades são definidas no banco de dados servidor. As colunas de identidade do SQL Server Compact devem ter um tipo de dados int ou bigint. As colunas de identidade do SQL Server Compact não podem ter um tipo de dados smallint, tinyint, decimal ou numeric. Para obter mais informações sobre colunas de identidade, consulte Selecionando uma chave primária adequada para um ambiente distribuído.
As colunas computadas são copiadas para o banco de dados cliente durante o download, mas a propriedade da coluna computada não. Recomendamos não usar colunas computadas em cenários bidirecionais e de carregamento, uma vez que pode ocorrer falha nas operações de inserção durante o carregamento. Para evitar esse problema, filtre as colunas fora do conjunto de dados, não as incluindo na cláusula WHERE das instruções SELECT usadas para recuperar dados. Para obter mais informações sobre filtragem, consulte Como filtrar linhas e colunas.