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