Freigeben über


Datentypmapping und Überlegungen

Für die Client- und Serversynchronisierung unterstützt Sync Framework Serverdatentypen, die mithilfe von ADO.NET gültigen Datentypen in SQL Server Compact 3.5 SP1 zugeordnet werden können. Die folgenden Tabellen zeigen die Standardzuordnung von Datentypen. Den ersten beiden Tabellen können Sie die Zuordnungen zwischen ADO.NET und SQL Server Compact entnehmen. Die dritte Tabelle zeigt die Zuordnungen zwischen SQL Server 2008 und SQL Server Compact. Diese Zuordnungen sind möglich, weil diese beiden SQL Server-Versionen in weiten Teilen die gleichen Datentypen verwenden. Wenn eine Anwendung eine andere Zuordnung erfordert, steht Ihnen zur Zuordnung der Datentypen das SyncSchemaColumn-Objekt zur Verfügung. Ein Beispiel zur Verwendung dieses Objekts finden Sie unter Vorgehensweise: Initialisieren der Clientdatenbank und Arbeiten mit dem Tabellenschema.

Zuordnungen zwischen ADO.NET und SQL Server Compact

ADO.NET-Datentyp SQL Server Compact-Datentyp

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

SQL Server Compact-Datentyp ADO.NET-Datentyp

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[]

Zuordnungen zwischen SQL Server 2008 und SQL Server Compact 3.5

SQL Server 2008-Datentyp SQL Server Compact 3.5 SP1-Datentyp

bigint

bigint

binary(n)

varbinary

bit

bit

char(n)

nchar(n) oder ntext

Wenn die Länge der Daten 4.000 Zeichen nicht übersteigt, wird nchar verwendet. Bei Daten mit einer Länge über 4.000 Zeichen kommt ntext zum Einsatz.

CLR-benutzerdefinierter Typ

Nicht unterstützt.

date

nchar(27)-Wert im Format 'jjjj-mm-tt' 1

datetime

datetime

datetime2

nchar(27)-Wert im Format 'jjjj-mm-tt hh:mm:ss:nnnnnnn' 1

datetimeoffset

nvarchar(34)-Wert im Format 'jjjj-mm-tt hh:mm:ss:nnnnnnn [+/-] hh:mm' 1, 2

decimal

Wird nicht unterstützt. Verwenden Sie numeric.

double

double

float

float

geography

Nicht konvertiert durch Sync Framework 3

geometry

Nicht konvertiert durch Sync Framework 3

hierarchyid

Nicht konvertiert durch Sync Framework 3

image

image

int

int

money

money

nchar(n)

nchar(n)

ntext

ntext

nvarchar(n)

nvarchar(n)

nvarchar(max)

ntext

Wenn Daten länger als die ntext-Spalte sind, schlägt die Synchronisierung fehl.

numeric

numeric

real

real

smalldatetime

datetime

Wenn die Genauigkeit der datetime-Daten größer ist als die Genauigkeit der smalldatetime-Spalte, schlägt die Synchronisierung fehl.

smallint

smallint

smallmoney

money

sql_variant

ntext

Wenn in der sql_variant -Spalte binäre Daten vorhanden sind, müssen die binären Daten eine gerade Anzahl von Bytes aufweisen. Anderenfalls kommt es zu einem Konvertierungsfehler.

text

ntext

Wenn die Länge des Textes 1.073.741.823 Zeichen übersteigt, schlägt die Synchronisierung fehl.

time

nvarchar(16)-Wert im Format 'hh:mm:ss:nnnnnnn' 1

tinyint

tinyint

uniqueidentifier

uniqueidentifier

varbinary(n)

varbinary(n)

varbinary(max)

image

Wenn Daten länger als die image-Spalte sind, schlägt die Synchronisierung fehl.

varchar(n)

nvarchar(n) oder ntext

Wenn die Länge der Daten 4.000 Zeichen nicht übersteigt, wird nvarchar verwendet. Bei Daten mit einer Länge von mehr als 4.000 Zeichen kommt ntext zum Einsatz.

varchar(max)

ntext

Wenn Daten länger als die ntext-Spalte sind, schlägt die Synchronisierung fehl.

xml

ntext

1 Folgendes ist bei diesen Datums- und Uhrzeittypen zu beachten:

  • Wenn der Serveranbieter auf einem Computer mit ADO.NET 2.0 gehostet wird, werden diese Typen auf dem Server konvertiert. Wenn der Serveranbieter auf einem Computer mit ADO.NET 2.0 SP1 gehostet wird, werden die Typen an den Client gesendet und dann dort konvertiert.

  • Werte werden auf dem Client und dem Server möglicherweise unterschiedlich behandelt. Beispielsweise sind bei einer Spalte vom Typ datetime2 auf dem Server die Werte '0001-01-01 00:00:00.0000000' und '0001-01-01 12:00 AM' gleich. Auf dem Client werden die Werte als unterschiedliche Zeichenfolgen behandelt. Aus diesem Verhalten ergeben sich die folgenden Konsequenzen:

    • Spalten dieser Typen sollten nicht in Primärschlüsseln verwendet werden.

    • Spalten dieser Typen sollten auf dem Client als schreibgeschützt behandelt werden, es sei denn, die Formatierung von Werten wird durch eine Anwendung gesteuert.

2 Wenn der Serveranbieter auf einem Computer mit ADO.NET 2.0 SP1 gehostet wird, muss ADO.NET 2.0 SP1 auch auf dem Client bereitgestellt werden, damit die Konvertierung erfolgreich durchgeführt werden kann. Die automatische Konvertierung von datetimeoffset auf dem Client wird von .NET Compact Framework 2.0 SP1 oder .NET Compact Framework 3.5 nicht unterstützt.

3 Sie können diese Typen zur Synchronisierung mithilfe des SyncSchemaColumn-Objekts auf dem Server in varbinary(max) oder image konvertieren. Ein Beispiel zur Verwendung dieses Objekts finden Sie unter Vorgehensweise: Initialisieren der Clientdatenbank und Arbeiten mit dem Tabellenschema.

Überlegungen zu Zuordnungen

Sync Framework zeigt bei Datentypen das folgende Verhalten:

  • Daten aus Spalten mit dem timestamp-Datentyp werden nicht vom Server kopiert. timestamp-Spalten werden während der Synchronisierung dem binary(8) -Datentyp zugeordnet. Dies liegt daran, dass timestamp-Daten in der Regel nur in der Datenbank sinnvoll sind, in der sie erstellt wurden.

  • Während ROWGUID-Spalten vom Server in die Clientdatenbank kopiert werden, wird die SQL Server-ROWGUIDCOL-Eigenschaft nicht kopiert. Ein Beispiel für das Einrichten dieser Eigenschaft finden Sie unter Vorgehensweise: Initialisieren der Clientdatenbank und Arbeiten mit dem Tabellenschema.

  • Identitätsspalten werden vom Server in die Clientdatenbank kopiert, während der ID-Ausgangswert und der Inkrementwert immer auf 0 bzw. 1 gesetzt werden. Dies erfolgt unabhängig davon, wie die Eigenschaften in der Serverdatenbank festgelegt wurden. SQL Server Compact-Identitätsspalten müssen den Datentyp int oder bigint haben. SQL Server Compact-Identitätsspalten dürfen nicht den Datentyp smallint, tinyint, decimal oder numeric aufweisen. Weitere Informationen zu Identitätsspalten finden Sie unter Auswählen eines geeigneten Primärschlüssels für eine verteilte Umgebung.

  • Berechnete Spalten werden während des Herunterladens in die Clientdatenbank kopiert, die Eigenschaft der berechneten Spalte hingegen nicht. Wir empfehlen, bei bidirektionalen und Nur-Upload-Szenarien keine berechneten Spalten zu verwenden, weil Einfügevorgänge beim Hochladen fehlschlagen können. Um dieses Problem zu vermeiden, filtern Sie die Spalten nach dem Dataset, indem Sie sie nicht in die WHERE-Klausel der SELECT-Anweisungen einschließen, die zum Abrufen der Daten verwendet werden. Weitere Informationen zum Filtern finden Sie unter Vorgehensweise: Filtern von Zeilen und Spalten.

Siehe auch

Konzepte

Überlegungen zum Entwurf und zur Bereitstellung von Anwendungen