Partager via


Mappage de types de données et éléments à prendre en compte

Pour la synchronisation client et serveur, Sync Framework prend en charge les types de données serveur pouvant être mappés à des types de données valides dans SQL Server Compact 3.5 SP1 en utilisant ADO.NET. Les tableaux suivants décrivent comment les types sont mappés par défaut. Les deux premiers tableaux illustrent les mappages entre ADO.NET et SQL Server Compact. Le troisième tableau illustre les mappages entre SQL Server 2008 et SQL Server Compact. Ces mappages sont possibles, car ces deux versions de SQL Server partagent la plupart des mêmes types de données. Si une application nécessite différents mappages, utilisez l'objet SyncSchemaColumn pour mapper les types. Pour obtenir un exemple indiquant comment utiliser cet objet, consultez Procédure : initialiser la base de données client et travailler avec un schéma de table.

Mappages entre ADO.NET et SQL Server Compact

Type de données ADO.NET Type de données 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

Type de données SQL Server Compact Type de données 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[]

Mappages entre SQL Server 2008 et SQL Server Compact 3.5

Type de données SQL Server 2008 Type de données SQL Server Compact 3.5 SP 1

bigint

bigint

binary(n)

varbinary

bit

bit

char(n)

nchar(n) ou ntext

Si la longueur des données est inférieure ou égale à 4 000 caractères, nchar est utilisé ; sinon, ntext est utilisé.

Type CLR défini par l'utilisateur

Non pris en charge.

date

Valeur nchar(27) de la forme « AAAA-MM-JJ » 1

datetime

datetime

datetime2

Valeur nchar(27) de la forme « AAAA-MM-JJ hh:mm:ss.nnnnnnn » 1

datetimeoffset

Valeur nvarchar(34) de la forme « AAAA-MM-JJ hh:mm:ss.nnnnnnn [+/-] hh:mm » 1, 2

decimal

Non pris en charge ; utilisez numeric.

double

double

float

float

geography

Non converti par Sync Framework 3

geometry

Non converti par Sync Framework 3

hierarchyid

Non converti par Sync Framework 3

image

image

int

int

money

money

nchar(n)

nchar(n)

ntext

ntext

nvarchar(n)

nvarchar(n)

nvarchar(max)

ntext

Si la longueur des données dépasse la longueur de la colonne ntext, la synchronisation échoue.

numeric

numeric

real

real

smalldatetime

datetime

Si la précision des données datetime dépasse la précision de la colonne smalldatetime, la synchronisation échoue.

smallint

smallint

smallmoney

money

sql_variant

ntext

Si des données binaires existent dans la colonne sql_variant , elles doivent comprendre un nombre d'octets pair ou une erreur de conversion se produit.

text

ntext

Si la longueur des données de texte dépasse 1 073 741 823 caractères, la synchronisation échoue.

time

Valeur nvarchar(16) de la forme « hh:mm:ss.nnnnnnn » 1

tinyint

tinyint

uniqueidentifier

uniqueidentifier

varbinary(n)

varbinary(n)

varbinary(max)

image

Si la longueur des données dépasse la longueur de la colonne d'image, la synchronisation échoue.

varchar(n)

nvarchar(n) ou ntext

Si la longueur des données est inférieure ou égale à 4 000 caractères, nvarchar est utilisé ; sinon, ntext est utilisé.

varchar(max)

ntext

Si la longueur des données dépasse la longueur de la colonne ntext, la synchronisation échoue.

xml

ntext

1 Gardez à l'esprit les points suivants pour ces types de dates et d'heures :

  • Si le fournisseur serveur est hébergé sur un ordinateur qui exécute ADO.NET 2.0, ces types sont convertis sur le serveur. Si le fournisseur serveur est hébergé sur un ordinateur qui exécute ADO.NET 2.0 SP1, les types sont envoyés sur le client où ils sont convertis.

  • Les valeurs peuvent être traitées de façon différente sur le client et le serveur. Par exemple, avec une colonne de type datetime2 sur le serveur, les valeurs « 0001-01-01 00:00:00.0000000 » et « 0001-01-01 12:00 AM » sont identiques. Sur le client, les valeurs sont traitées comme des chaînes différentes. Les conséquences sont les suivantes :

    • Les colonnes de ces types ne doivent pas être utilisées dans les clés primaires.

    • Les colonnes de ces types doivent être traitées comme étant en lecture seule sur le client, sauf si une application garantit que la mise en forme des valeurs est contrôlée.

2 Si le fournisseur serveur est hébergé sur un ordinateur qui exécute ADO.NET 2.0 SP1, ADO.NET 2.0 SP1 doit également être disponible sur le client pour que la conversion réussisse. La conversion automatique de datetimeoffset sur le client n'est pas prise en charge par .NET Compact Framework 2.0 SP1 ni .NET Compact Framework 3.5.

3 Pour synchroniser ces types, vous pouvez les convertir en varbinary(max) ou image sur le serveur à l'aide de l'objet SyncSchemaColumn. Pour obtenir un exemple indiquant comment utiliser cet objet, consultez Procédure : initialiser la base de données client et travailler avec un schéma de table.

Considérations sur le mappage

Le comportement de Sync Framework est le suivant avec les types de données :

  • Les données des colonnes qui possèdent le type de données timestamp ne sont pas copiées à partir du serveur. Les colonnes timestamp sont mappées au type de données binary(8) durant la synchronisation. Cela est dû au fait que les données timestamp ne sont généralement explicites que dans la base de données dans laquelle elles ont été créées.

  • Les colonnes ROWGUID sont copiées du serveur vers la base de données client, mais la propriété ROWGUIDCOL de SQL Server n'est pas copiée. Pour obtenir un exemple décrivant comment définir cette propriété, consultez Procédure : initialiser la base de données client et travailler avec un schéma de table.

  • Les colonnes Compteur sont copiées du serveur vers la base de données client, mais les valeurs de début et d'incrément du compteur sont toujours définies à 0 et à 1, respectivement. Cela s'applique quelle que soit la manière dont les propriétés ont été définies dans la base de données serveur. Les colonnes d'identité de SQL Server Compact doivent posséder un type de données int ou bigint. Les colonnes d'identité de SQL Server Compact ne peuvent pas posséder un type de données smallint, tinyint, decimal ou numeric. Pour plus d'informations sur les colonnes Compteur, consultez Sélection d'une clé primaire appropriée pour un environnement distribué.

  • Les colonnes calculées sont copiées à partir de la base de données client durant le téléchargement, mais la propriété correspondante n'est pas copiée. Il est déconseillé d'utiliser les colonnes calculées dans les scénarios de synchronisation bidirectionnelle et par téléchargement ascendant, car les opérations d'insertion peuvent échouer lors du téléchargement. Pour éviter ce problème, filtrez les colonnes afin de ne pas les inclure dans la clause WHERE des instructions SELECT utilisées pour extraire les données. Pour plus d'informations sur le filtrage, consultez Procédure : filtrer des lignes et des colonnes.

Voir aussi

Concepts

Considérations sur la conception et le déploiement d'applications