데이터 형식 매핑 및 고려 사항
클라이언트 및 서버 동기화의 경우 Sync Framework는 ADO.NET을 사용하여 SQL Server Compact 3.5 SP1의 올바른 데이터 형식으로 매핑할 수 있는 서버 데이터 형식을 지원합니다. 다음 표에서는 형식이 기본적으로 매핑되는 방식을 보여 줍니다. 처음 두 표에서는 ADO.NET 및 SQL Server Compact 간의 매핑을 보여 줍니다. 세 번째 표에서는 SQL Server 2008 및 SQL Server Compact 간의 매핑을 보여 줍니다. 이러한 매핑은 SQL Server의 두 버전이 동일한 데이터 형식을 많이 공유하기 때문에 가능합니다. 응용 프로그램에 다른 매핑이 필요한 경우에는 SyncSchemaColumn 개체를 사용하여 형식을 매핑합니다. 이 개체를 사용하는 방법에 대한 예제는 방법: 클라이언트 데이터베이스 초기화 및 테이블 스키마 사용을 참조하십시오.
ADO.NET 및 SQL Server Compact 간의 매핑
ADO.NET 데이터 형식 | 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 |
SQL Server Compact 데이터 형식 | 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[] |
SQL Server 2008과 SQL Server Compact 3.5 간의 매핑
SQL Server 2008 데이터 형식 | SQL Server Compact 3.5 SP 1 데이터 형식 |
---|---|
bigint |
bigint |
binary(n) |
varbinary |
bit |
bit |
char(n) |
nchar(n) 또는 ntext 데이터의 길이가 4,000자 이하이면 nchar이 사용되고, 그렇지 않으면 ntext가 사용됩니다. |
CLR 사용자 정의 형식 |
지원되지 않습니다. |
date |
'YYYY-MM-DD' 형식의 nchar(27) 값 1 |
datetime |
datetime |
datetime2 |
'YYYY-MM-DD hh:mm:ss.nnnnnnn' 형식의 nchar(27) 값 1 |
datetimeoffset |
'YYYY-MM-DD hh:mm:ss.nnnnnnn [+/-] hh:mm' 형식의 nvarchar(34) 값 1, 2 |
decimal |
지원되지 않습니다. numeric을 사용하십시오. |
double |
double |
float |
float |
geography |
Sync Framework에서 변환되지 않습니다. 3 |
geometry |
Sync Framework에서 변환되지 않습니다. 3 |
hierarchyid |
Sync Framework에서 변환되지 않습니다. 3 |
image |
image |
int |
int |
money |
money |
nchar(n) |
nchar(n) |
ntext |
ntext |
nvarchar(n) |
nvarchar(n) |
nvarchar(max) |
ntext 데이터의 길이가 ntext 열의 길이를 초과하면 동기화가 실패합니다. |
numeric |
numeric |
real |
real |
smalldatetime |
datetime datetime 데이터의 자릿수가 smalldatetime 열의 자릿수를 초과하면 동기화가 실패합니다. |
smallint |
smallint |
smallmoney |
money |
sql_variant |
ntext 이진 데이터가 sql_variant 열에 있으면 이진 데이터의 바이트 수가 짝수여야 합니다. 그렇지 않으면 변환 오류가 발생합니다. |
text |
ntext 텍스트 데이터의 길이가 1,073,741,823자를 초과하면 동기화가 실패합니다. |
time |
'hh:mm:ss.nnnnnnn' 형식의 nvarchar(16) 값 1 |
tinyint |
tinyint |
uniqueidentifier |
uniqueidentifier |
varbinary(n) |
varbinary(n) |
varbinary(max) |
image 데이터의 길이가 이미지 열의 길이를 초과하면 동기화가 실패합니다. |
varchar(n) |
nvarchar(n) 또는 ntext 데이터의 길이가 4,000자 이하이면 nvarchar이 사용되고, 그렇지 않으면 ntext가 사용됩니다. |
varchar(max) |
ntext 데이터의 길이가 ntext 열의 길이를 초과하면 동기화가 실패합니다. |
xml |
ntext |
1 이러한 날짜 및 시간 형식의 경우 다음과 같은 문제를 염두에 두십시오.
서버 공급자가 ADO.NET 2.0을 실행하는 컴퓨터에 호스팅된 경우 이러한 형식이 서버에서 변환됩니다. 서버 공급자가 ADO.NET 2.0 SP1을 실행하는 컴퓨터에 호스팅된 경우에는 이러한 형식이 클라이언트에 전송된 다음 클라이언트에서 변환됩니다.
클라이언트와 서버에서 값이 다르게 처리될 수 있습니다. 예를 들어, 서버에서는 datetime2 형식의 열에서 '0001-01-01 00:00:00.0000000' 및 '0001-01-01 12:00 AM' 값이 동일하지만 클라이언트에서는 두 값이 다른 문자열로 처리됩니다. 이 때문에 다음과 같은 결과가 발생합니다.
이러한 형식의 열을 기본 키로 사용하면 안 됩니다.
응용 프로그램에서 값의 형식 지정을 제어하지 않는 경우 클라이언트에서 이러한 형식의 열을 읽기 전용으로 처리해야 합니다.
2 서버 공급자가 ADO.NET 2.0 SP1을 실행하는 컴퓨터에 호스팅된 경우 변환이 성공하려면 클라이언트에서도 ADO.NET 2.0 SP1을 사용할 수 있어야 합니다. 클라이언트에서의 datetimeoffset 자동 변환은 .NET Compact Framework 2.0 SP1 또는 .NET Compact Framework 3.5에서 지원되지 않습니다.
3 이러한 형식을 동기화하려면 SyncSchemaColumn 개체를 사용하여 서버에서 이러한 형식을 varbinary(max) 또는 image로 변환하면 됩니다. 이 개체를 사용하는 방법에 대한 예제는 방법: 클라이언트 데이터베이스 초기화 및 테이블 스키마 사용을 참조하십시오.
매핑 고려 사항
Sync Framework는 데이터 형식에 대해 다음과 같은 동작을 수행합니다.
timestamp 데이터 형식이 있는 열의 데이터는 서버에서 복사되지 않습니다. timestamp 열은 동기화 중에 binary(8) 데이터 형식으로 매핑됩니다. 이는 timestamp 데이터가 일반적으로 만들어진 데이터베이스 내에서만 의미를 가지기 때문입니다.
ROWGUID 열은 서버에서 클라이언트 데이터베이스로 복사되지만 SQL Server ROWGUIDCOL 속성은 복사되지 않습니다. 이 속성을 설정하는 방법에 대한 예제는방법: 클라이언트 데이터베이스 초기화 및 테이블 스키마 사용을 참조하십시오.
ID 열은 서버에서 클라이언트 데이터베이스로 복사되지만 ID 시드 및 증분은 항상 0 및 1로 각각 설정됩니다. 이는 서버 데이터베이스에서 속성이 설정된 방법에 상관없이 항상 적용됩니다. SQL Server Compact ID 열에는 int 또는 bigint 데이터 형식이 있어야 합니다. SQL Server Compact ID 열에는 smallint, tinyint, decimal 또는 numeric 데이터 형식이 있을 수 없습니다. ID 열에 대한 자세한 내용은 분산 환경에 대해 적절한 기본 키 선택을 참조하십시오.
계산 열은 다운로드 중에 클라이언트 데이터베이스로 복사되지만 계산 열 속성은 복사되지 않습니다. 업로드 시에 삽입 작업이 실패할 수 있으므로 양방향 및 업로드 시나리오에서는 계산 열을 사용하지 않는 것이 좋습니다. 이러한 문제가 발생하지 않도록 하려면 데이터를 검색하는 데 사용하는 SELECT 문의 WHERE 절에서 원하는 열을 제외하여 해당 열을 데이터에 포함되지 않도록 필터링합니다. 필터링에 대한 자세한 내용은 방법: 행 및 열 필터링을 참조하십시오.