Compartir a través de


Consideraciones y asignación de tipos de datos

En la sincronización de cliente y servidor, Sync Framework admite tipos de datos de servidor que se puedan asignar a tipos de datos válidos de SQL Server Compact 3.5 SP1 1 mediante ADO.NET. En las tablas siguientes se muestra cómo se asignan los tipos de manera predeterminada. En las dos primeras tablas se muestran las asignaciones entre ADO.NET y SQL Server Compact. En la tercera tabla se muestran las asignaciones entre SQL Server 2008 y SQL Server Compact. Estas asignaciones son posibles porque estas dos versiones de SQL Server comparten muchos tipos de datos iguales. Si una aplicación requiere otra asignación, asigne los tipos mediante el objeto SyncSchemaColumn. Para obtener un ejemplo sobre cómo usar este objeto, vea Inicializar la base de datos cliente y trabajar con el esquema de tablas.

Asignaciones entre ADO.NET y SQL Server Compact

Tipo de datos de ADO.NET Tipo de datos de 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 datos de SQL Server Compact Tipo de datos de 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[]

Asignaciones entre SQL Server 2008 y SQL Server Compact 3.5

Tipo de datos de SQL Server 2008 Tipo de datos de SQL Server Compact 3.5 SP 1

bigint

bigint

binary(n)

varbinary

bit

bit

char(n)

nchar(n) o ntext

Si la longitud de los datos es igual o inferior a 4.000 caracteres, se utiliza nchar; en caso contrario, se utiliza ntext.

Tipo CLR definido por el usuario

No se admite.

date

Valor nchar(27) con la forma 'AAAA-MM-DD' 1

datetime

datetime

datetime2

Valor nchar(27) con la forma 'AAAA-MM-DD hh:mm:ss.nnnnnnn' 1

datetimeoffset

Valor nvarchar(34) con la forma 'AAAA-MM-DD hh:mm:ss.nnnnnnn [+/-] hh:mm' 1, 2

decimal

No se admite; use numeric.

double

double

float

float

geography

No convertido por Sync Framework 3

geometry

No convertido por Sync Framework 3

hierarchyid

No convertido por Sync Framework 3

image

image

int

int

money

money

nchar(n)

nchar(n)

ntext

ntext

nvarchar(n)

nvarchar(n)

nvarchar(max)

ntext

Si la longitud de los datos supera la longitud de la columna ntext, se produce un error de sincronización.

numeric

numeric

real

real

smalldatetime

datetime

Si la precisión de los datos datetime supera la precisión de la columna smalldatetime, se produce un error de sincronización.

smallint

smallint

smallmoney

money

sql_variant

ntext

Si hay datos binarios en la columna sql_variant, estos deben ser un número par de bytes o se producirá un error de conversión.

text

ntext

Si la longitud de los datos de texto es superior a 1.073.741.823 caracteres, se produce un error de sincronización.

time

Valor nvarchar(16) con la forma 'hh:mm:ss.nnnnnnn' 1

tinyint

tinyint

uniqueidentifier

uniqueidentifier

varbinary(n)

varbinary(n)

varbinary(max)

image

Si la longitud de los datos supera la longitud de la columna de imagen, se produce un error de sincronización.

varchar(n)

nvarchar(n) o ntext

Si la longitud de los datos es igual o inferior a 4.000 caracteres, se utiliza nvarchar; en caso contrario, se utiliza ntext.

varchar(max)

ntext

Si la longitud de los datos supera la longitud de la columna ntext, se produce un error de sincronización.

xml

ntext

1 Tenga en cuenta los siguientes puntos para estos tipos de fecha y hora:

  • Si el proveedor del servidor se hospeda en un equipo que está ejecutando ADO.NET 2.0, estos tipos se convierten en el servidor. Si el proveedor del servidor se hospeda en un equipo que está ejecutando ADO.NET 2.0 SP1, estos tipos se envían al cliente y se convierten en él.

  • Los valores se pueden tratar de manera diferente en el cliente y el servidor. Por ejemplo, con una columna de tipo datetime2 en el servidor, los valores '0001-01-01 00:00:00.0000000' y '0001-01-01 12:00 AM' son los mismos. En el cliente, los valores se tratan como cadenas diferentes. Este comportamiento tiene las consecuencias siguientes:

    • Las columnas de estos tipos no se deben utilizar en claves principales.

    • Las columnas de estos tipos se deben tratar como de sólo lectura en el cliente, a menos que una aplicación asegure que el formato de valores está controlado.

2 Si el proveedor del servidor se hospeda en un equipo que está ejecutando ADO.NET 2.0 SP1, ADO.NET 2.0 SP1 también debe estar disponible en el cliente para que la conversión sea correcta. .NET Compact Framework 2.0 SP1 y .NET Compact Framework 3.5 no admiten la conversión automática de datetimeoffset en el cliente.

3 Para sincronizar estos tipos, puede convertirlos a varbinary(max) o image en el servidor utilizando el objeto SyncSchemaColumn. Para obtener un ejemplo sobre cómo usar este objeto, vea Inicializar la base de datos cliente y trabajar con el esquema de tablas.

Consideraciones sobre asignación

Sync Framework tiene el comportamiento siguiente con los tipos de datos:

  • Los datos de las columnas con el tipo de datos timestamp no se copian desde el servidor. Las columnas timestamp se asignan al tipo de datos binary(8) durante la sincronización. Esto se debe a que los datos timestamp normalmente sólo tienen significado en la base de datos donde se crean.

  • Las columnas ROWGUID se copian desde el servidor a la base de datos cliente, pero no así la propiedad ROWGUIDCOL de SQL Server. Para obtener un ejemplo acerca de cómo establecer esta propiedad, vea Inicializar la base de datos cliente y trabajar con el esquema de tablas.

  • Las columnas de identidad se copian desde el servidor a la base de datos cliente, pero el incremento y el valor de inicialización de identidad siempre se establecen en 1 y 0, respectivamente. Esto es independiente de cómo se establezcan las propiedades en la base de datos servidor. Las columnas de identidad de SQL Server Compact deben tener un tipo de datos de int o bigint. Las columnas de identidad de SQL Server Compact no pueden tener un tipo de datos de smallint, tinyint, decimal o numeric. Para obtener más información acerca de las columnas de identidad, vea Seleccionar una clave principal apropiada para un entorno distribuido.

  • Las columnas calculadas se copian a la base de datos cliente durante la descarga, pero no así la propiedad de la columna calculada. Se recomienda no usar columnas calculadas en los escenarios de carga y bidireccional, puesto que las operaciones de inserción pueden producir errores durante la carga. Para evitar este problema, filtre las columnas del conjunto de datos, es decir, no las incluya en la cláusula WHERE de las instrucciones SELECT que use para recuperar datos. Para obtener más información sobre las tareas de filtrado, vea Filtrar filas y columnas.

Vea también

Conceptos

Consideraciones sobre el diseño y la implementación de aplicaciones