12

온라인 및 오프라인 모드에서 작동 할 수있는 Windows C# 응용 프로그램을 개발합니다.
온라인 모드에 있으면 SQL Server에 연결됩니다. 오프라인 모드에서는 로컬 DB에 연결됩니다.MS Sync Framework 및 SQL Server Compact

Microsoft Sync Framework 2.1을 사용하여 필요할 때 2 개의 데이터베이스를 동기화합니다.

지금까지는 로컬 데이터베이스로 SQL Server의 LocalDB 인스턴스를 사용했습니다. 하지만 내 응용 프로그램의 설치 과정에서 시스템을 자동으로 설정하는 것은 쉽지 않습니다. 따라서 SQL Server Compact 3.5 또는 4.0을 사용하여 배포하기가 쉽습니다 (단일 파일로 제공됨).

하지만 그것도 컴팩트 DB의 프로비저닝 코드를 컴파일 할 수 없습니다 : I합니다 (Ce 클래스없이) 이전에 사용

DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription("MyScope"); 
SqlCeConnection clientConn = new SqlCeConnection(OfflineConnectionString); 
var clientProvision = new SqlCeSyncScopeProvisioning(clientConn, scopeDesc); 
clientProvision.Apply(); 

하지만 SqlCeSyncScopeProvisioning 확인할 수 없습니다.

무엇인가 잘못되었습니다.
내 로컬 데이터베이스로 CompactDB를 어떻게 동기화 할 수 있습니까?

+0

LocalDB 데이터베이스 파일 배포를 시도 했습니까? 특정 LocalDB 파일에 연결할 수 있습니다. 예 : 데이터 원본 = (LocalDb) \ v12.0; AttachDbFilename = C : \ MyDatabase.mdf; 초기 카탈로그 = MyDatabase; 통합 보안 = True ". 클라이언트 PC에 응용 프로그램을 배포하지 않았으므로 * SqlLocalDB *를 설치하는 것이 까다로울 지 모르지만 한 번 제공 할 수는 있습니다. – Gabrielius

+0

SqlLocalDB를 설치하는 것은 쉽지 않습니다. 특히 기존의 기존 인스턴스를 제거하고 새 인스턴스를 설치해야 할 때 작동하게하려면 특히 그렇습니다. 그러나 컴팩트 방식이 실패하면 계속 작업해야합니다. 감사. –

+0

이전 버전을 삭제해야하는 이유는 무엇입니까? 너 니 꺼야? 원하는 이름으로 새 인스턴스를 추가 할 수 있습니다. 나는 CE가 좀 오래되었고 결국 죽을 것이기 때문에 LocalDB를지지한다고 생각합니다. – Gabrielius

답변

7

먼저 sdk을 성공적으로 설치 했습니까? ,

  • Microsoft.Synchronization.Data.Server.dll

  • 마이크로 소프트

    • Microsoft.Synchronization.Data.dll :이 후

      , 다음 참조를 추가했는지 확인 .Synchronization.Data.SqlServer.dll

    당신이 사용하는 경우 작업 귀하의 코멘트에 대하여 4.0
  • 편집

    , 이것이 -

    또한 내 경우는

    • 에 System.Data.SqlServerCe를 추가하는 일 SQL Server CE 4.

      SQL Server CE 3.5 이상에서 지금 사용해 보았습니다. 증서로 문제를 재현 할 수 있습니다.

      SQL Server CE 4.0으로 전환하면 문제가 해결되었습니다.

      표 4.0

      Table

      TestCode

      var scopeDesc = new DbSyncScopeDescription("MyScope"); 
      var tbl = new DbSyncTableDescription("TestTable"); 
      var pkColumn = new DbSyncColumnDescription("Id", "int"); 
      pkColumn.IsPrimaryKey = true; 
      tbl.Columns.Add(pkColumn); 
      tbl.Columns.Add(new DbSyncColumnDescription("Name", "nvarchar(254)")); 
      scopeDesc.Tables.Add(tbl); 
      var clientConn = new SqlCeConnection(@"Data Source=test.sdf;Persist Security Info=False;"); 
      var clientProvision = new SqlCeSyncScopeProvisioning(clientConn, scopeDesc); 
      clientProvision.Apply(); 
      

      결과

      모든 것이 잘 컴파일합니다. 위의 단계를 수행 한 후 코드를 SQL Server CE로 쉽게 마이그레이션 할 수 있어야합니다.

    +0

    답변 해 주셔서 감사합니다. VS2013을 사용합니다. 이전에 LocalDB 인스턴스와 함께 사용했기 때문에 SDK가 올바르게 설치되었고 제대로 작동했습니다. 나는 CE로 바뀌려고 노력했지만 이제는'SqlSyncScopeProvisioning'을 사용하는 것부터'SqlCeSyncScopeProvisioning'을 사용하여 조정하는 코드를 컴파일하지 않습니다. 4.0은 최신 동기화 프레임 워크에서 지원되지 않으므로 SQL Compact 3.5도 사용합니다. 모든 DLL이 솔루션에 추가됩니다. –

    +0

    @juergend 업데이트 됨 응답 내역 – lokusking

    +0

    Microsoft.Synchronization.Data.SqlServerCe.dll 3.5 대신 버전 3.1을 사용하여 문제를 해결했습니다. Compact 4.0에서는 다양한 사이트에서 읽을 수 없으므로 사용하지 않았습니다. –