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.

Consulte também

Conceitos

Considerações sobre implantação e design de aplicativos