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