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のプロビジョニング・コードをコンパイルするために取得することはできません:私は(Ceクラスなし)の前に使用

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

しかしSqlCeSyncScopeProvisioningは解決することはできません。

ここでは何かがひどく間違っています。
CompactDBを同期してローカルデータベースとして配布するにはどうすればよいですか?

+0

LocalDBデータベースファイルを配布しようとしましたか?特定のLocalDBファイルに接続することができます。例えば。 "ConnectionString ="データソース=(LocalDb)\ v12.0; AttachDbFilename = C:\ MyDatabase.mdf;初期カタログ= MyDatabase;統合セキュリティ= True "私はクライアントPCに自分のアプリケーションを配布していないので、* SqlLocalDB *をインストールするのが面倒かどうかはわかりませんが、あなたはそれを撃つことができます。 – Gabrielius

+0

SqlLocalDBをインストールするのは簡単ではありません。特に、既存のインスタンスを削除して新しいインスタンスをインストールする必要がある場合は、そのインスタンスを有効にする必要があります。しかし、コンパクトなアプローチが失敗した場合、私はそれを続ける必要があります。ありがとう。 –

+0

古いものを削除するのはなぜですか?あなたの物ですか?任意の名前で新しいインスタンスを追加できます。私は、CEがちょっと古くて、最終的に死ぬだろうから、LocalDBに提唱していると思います。 – Gabrielius

答えて

7

まず、sdkが正常にインストールされていることを確認してください。

この後

、あなたは次の参照を追加したことを確認してください。

  • Microsoft.Synchronization.Data.dll、

  • Microsoft.Synchronization.Data.Server.dll

  • マイクロソフト.Synchronization.Data.SqlServer.dll

はまた、私の場合には、それは

  • System.Data.SqlServerCeを追加することで働いていた - あなたのコメントに対する4.0

EDIT

をあなたが使用している場合、これは作業のみです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を使用していたので、SDKは正しくインストールされていました。私はCEに変更しようとしましたが、現在は 'SqlSyncScopeProvisioning'を使うことから' SqlCeSyncScopeProvisioning'を使うように調整しなければならないコードをコンパイルしません。最新の同期フレームワークでは4.0がサポートされていないため、SQL Compact 3.5も使用します。すべてのDLLがソリューションに追加されます。 –

+0

@juergend私の回答が – lokusking

+0

に更新されました。Microsoft.Synchronization.Data.SqlServerCe.dllの3.5ではなくバージョン3.1を使用していました。私はあなたがそれがサポートされていない様々なサイトで読むことができるので、コンパクト4.0でそれを試していませんでした。 –

関連する問題