이 연습에서는 SyncCompactDB라는 SQL Server Compact 데이터베이스를 만들고 ProductsScope 관련 아티팩트를 사용하여 이 Compact 데이터베이스를 프로비전하는 콘솔 응용 프로그램을 만듭니다. 프로비전 프로세스에서는 서버와 동기화할 수 있도록 클라이언트 데이터베이스를 준비합니다. 동기화 관련 아티팩트를 사용하여 서버 데이터베이스를 프로비전하는 작업은 앞의 연습: 범위 정의 및 서버 프로비전 연습에서 이미 마쳤습니다. 프로비전에 대한 보다 자세한 기술 정보는 Provisioning the Clients 및 동기화를 위한 프로비전(SQL Server)을 참조하십시오.
SQL Server Compact 데이터베이스를 만들려면
다음 목록에는 SyncDB 서버 데이터베이스의 클라이언트로 사용될 SyncCompactDB Compact 데이터베이스를 만드는 단계가 포함되어 있습니다.
SQL Server Management Studio에서 파일 메뉴를 클릭하고 개체 탐색기 연결을 클릭합니다.
서버에 연결 대화 상자에서 서버 유형으로 SQL Server Compact Edition을 선택합니다.
데이터베이스 파일 옆의 아래쪽 화살표를 클릭하고 새 데이터베이스를 클릭합니다.
SQL Server Compact 데이터베이스 새로 만들기 대화 상자에서 데이터베이스 파일 이름으로 C:\SyncSQLServerAndSQLCompact\SyncCompactDB.sdf를 입력하고 확인을 클릭합니다.
암호가 비어 있음을 알리는 메시지 상자가 표시되면 예를 클릭합니다.
서버에 연결 대화 상자에서 연결을 클릭합니다.
SQL Server Compact 데이터베이스를 프로비전하려면
다음 목록에는 Visual Studio를 사용하여 콘솔 응용 프로그램을 만들고 ProductsScope라는 동기화 범위와 관련된 아티팩트를 사용하여 SyncCompactDB라는 SQL Server Compact 데이터베이스를 프로비전하는 단계가 포함되어 있습니다.
Visual Studio의 솔루션 탐색기에서 **솔루션 ‘SyncSQLServerAndSQLCompact’**를 마우스 오른쪽 단추로 클릭하고, 추가를 가리킨 다음 새 프로젝트를 클릭합니다.
프로젝트 형식에서 **Visual C#**을 선택하고 템플릿에서 콘솔 응용 프로그램을 선택합니다.
프로젝트 이름에 ProvisionClient를 입력합니다.
확인을 클릭하여 새 프로젝트 대화 상자를 닫습니다.
솔루션 탐색기 창에서 ProvisionClient를 마우스 오른쪽 단추로 클릭하고 참조 추가를 클릭합니다.
Microsoft.Synchronization, Microsoft.Synchornization.Data, Microsoft.Synchronization.Data.SqlServer, Microsoft.Synchronization.Data.SqlServerCe를 선택하고 확인을 클릭하여 참조 추가 대화 상자를 닫습니다.
앞의 두 단계를 반복하여 System.Data.SqlServerCe 어셈블리에 대한 참조를 추가합니다.
Program.cs 파일 시작 부분에서 기존 using 문 다음에 아래의 using 문을 추가합니다.
using System.Data; using System.Data.SqlClient; using System.Data.SqlServerCe; using Microsoft.Synchronization; using Microsoft.Synchronization.Data; using Microsoft.Synchronization.Data.SqlServer; using Microsoft.Synchronization.Data.SqlServerCe;다음 문을 Main 메서드에 추가하여 Compact 데이터베이스에 대한 SQL 연결을 만듭니다.
// create a connection to the SyncCompactDB database SqlCeConnection clientConn = new SqlCeConnection(@"Data Source='C:\SyncSQLServerAndSQLCompact\SyncCompactDB.sdf'");다음 문을 Main 메서드에 추가하여 서버 데이터베이스에 대한 SQL 연결을 만듭니다.
// create a connection to the SyncDB server database SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");중요
기본 인스턴스를 사용하지 않는 경우 위의 문에서 서버 이름을 사용자 서버의 인스턴스 이름으로 바꿉니다. 예를 들어 SQL Server 인스턴스의 이름이 MYSQLINSTANCE인 경우 (로컬)을 .\MYSQLINSTANCE로 바꿉니다.
다음 문을 Main 메서드에 추가하여 ProductsScope 범위에 대한 설명을 SQL Server에서 가져옵니다. 이 문은 SqlSyncDescriptionBuilder 클래스에서 GetDescriptionForScope(String, SqlCeConnection) 메서드를 호출하여 서버에서 ProductsScope에 대한 설명을 검색합니다.
DbSyncScopeDescription 클래스를 사용하여 동기화 범위의 이름 및 동기화할 테이블 목록을 지정합니다. 이러한 정보는 명시적으로 지정하거나 GetDescriptionForScope(String, String, SqlConnection) 메서드를 사용하여 데이터베이스를 쿼리함으로써 얻을 수 있습니다. 이 연습에서는 SqlSyncDescriptionBuilder 클래스의 GetDescriptionForScope(String, String, SqlConnection) 메서드를 사용하여 서버에서 범위에 대한 설명을 검색합니다.
// get the description of ProductsScope from the SyncDB server database DbSyncScopeDescription scopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope("ProductsScope", serverConn);다음 문을 추가하여 ProductsScope 관련 아티팩트를 통해 SQL Server Compact 데이터베이스를 프로비전합니다. 동기화 범위 관련 아티팩트를 사용하여 SQL Server Compact 데이터베이스를 프로비전하는 대략적인 단계는 다음과 같습니다.
이전 단계에서 가져온 DbSyncScopeDescription을 기반으로 SqlCeSyncScopeProvisioning 클래스의 인스턴스를 만들고 Compact 데이터베이스에 대한 연결을 만듭니다. SqlCeSyncScopeProvisioning 클래스는 DbSyncScopeDescription 개체에서 나타내는 특정 범위에 대한 SQL Server Compact 데이터베이스의 프로비전을 나타냅니다.
SqlCeSyncScopeProvisioning 개체에서 Apply() 메서드를 호출하여 Compact 데이터베이스의 변경 내용 추적 인프라를 만드는 프로비전 프로세스를 시작합니다.
참고
CreateOrUseExisting은 Sync Framework에서 사용하는 기본값이므로 DbSyncCreationOption 값으로 CreateOrUseExisting을 사용하여 SetCreateTableDefault(DbSyncCreationOption) 메서드를 명시적으로 호출할 필요가 없습니다. Products 테이블은 프로비전 프로세스 중에 Compact 데이터베이스에 자동으로 만들어집니다. 범위가 구성된 경우 SetCreateTableDefault(DbSyncCreationOption) 메서드를 사용하여 기본 테이블을 만들지 여부를 지정합니다.
// create CE provisioning object based on the ProductsScope SqlCeSyncScopeProvisioning clientProvision = new SqlCeSyncScopeProvisioning(clientConn, scopeDesc); // starts the provisioning process clientProvision.Apply();참고
SqlCeSyncScopeProvisioning 클래스는 SQL Server Compact 데이터베이스를 프로비전하는 데 사용되고 SqlCeSyncScopeProvisioning 클래스는 Compact(SQL Server Compact) 데이터베이스를 프로비전하는 데 사용됩니다.
솔루션 탐색기에서 ProvisionClient를 마우스 오른쪽 단추로 클릭하고 빌드를 선택합니다.
솔루션 탐색기에서 ProvisionClient를 마우스 오른쪽 단추로 클릭하고 시작 프로젝트로 설정을 선택합니다.
경고
현재 프로젝트를 시작 프로젝트로 설정하지 않고 Ctrl+F5를 다시 누르는 경우 ProvisionServer 응용 프로그램이 다시 실행되고 "서버 데이터베이스에 이미 있는 범위입니다."와 비슷한 오류 메시지가 표시됩니다.
Ctrl+F5를 눌러 프로그램을 실행합니다.
Enter 키를 눌러 명령 프롬프트 창을 닫습니다.
SQL Server Management Studio에서 SQL Server Compact [My Computer\...\SyncCompactDB] 노드와 테이블을 차례로 확장합니다. 이 경우 프로비전 프로세스에서 만든 Products_Tracking, schema_info, scope_config, scope_info 등의 추가 테이블이 표시됩니다. 프로비전 프로세스에서 만든 트리거 및 저장 프로시저와 같은 다른 개체도 있습니다.
Visual Studio와 SQL Server Management Studio를 열어 둡니다.
전체 코드 예제
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlServerCe;
using Microsoft.Synchronization;
using Microsoft.Synchronization.Data;
using Microsoft.Synchronization.Data.SqlServer;
using Microsoft.Synchronization.Data.SqlServerCe;
namespace ProvisionClient
{
class Program
{
static void Main(string[] args)
{
// create a connection to the SyncCompactDB database
SqlCeConnection clientConn = new SqlCeConnection(@"Data Source='C:\SyncSQLServerAndSQLCompact\SyncCompactDB.sdf'");
SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");
// get the description of ProductsScope from the SyncDB server database
DbSyncScopeDescription scopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope("ProductsScope", serverConn);
// create CE provisioning object based on the ProductsScope
SqlCeSyncScopeProvisioning clientProvision = new SqlCeSyncScopeProvisioning(clientConn, scopeDesc);
// starts the provisioning process
clientProvision.Apply();
}
}
}