sql >> データベース >  >> RDS >> Sqlserver

WCF と Sync Framework を使用して HTTP 経由で SQL Server 2008 データベースを同期する

    SQL Server 2008 で WCF を使用して Sync Framework を動作させるために、次のことを行いました

    • SQL Server 2008 で有効な変更追跡
    • 同期に参加しているテーブルの変更追跡を有効にしました
    • anchor という名前のメタデータ テーブルを追加しました
    • 「guid」という名前のクライアント ID を追跡するテーブルを追加しました
    • MSF の codeplex プロジェクト サイトからクライアント同期プロバイダーとして入手できる SqlExpressClientSyncProvider を使用
    • <リ>

      SqlSyncAdapterBuilder を使用して、同期に参加するテーブルのアダプターを構築しました

      foreach (anchorTables の var item){ // アダプター ビルダーを使用して、変更追跡データと CRUD をクエリするための T-SQL を生成します SqlSyncAdapterBuilder builder =new SqlSyncAdapterBuilder(); builder.Connection =new SqlConnection(this.connectionStringFactory.ConnectionString); builder.ChangeTrackingType =ChangeTrackingType.SqlServerChangeTracking; builder.SyncDirection =SyncDirection.Bidirectional; builder.TableName =item.TableName; // ビルダー SyncAdapter から同期アダプターを取得します clientAdapter =builder.ToSyncAdapter(); clientAdapter.TableName =item.TableName; this.clientSyncProvider.SyncAdapters.Add(clientAdapter);}  
       <リ> 

      アンカーコマンドを追加

      SqlCommand anchroCommand =new SqlCommand { CommandText ="SELECT @" + SyncSession.SyncNewReceivedAnchor + " =change_tracking_current_version()" };anchroCommand.Parameters.Add("@" + SyncSession.SyncNewReceivedAnchor, SqlDbType.BigInt) .方向 =ParameterDirection.Output;this.clientSyncProvider.SelectNewAnchorCommand =anchroCommand;  
       <リ> 

      サーバー同期プロバイダーとして機能する DbServerSyncProvider のインスタンスを使用して、WCF サービスを実装しました。前の手順で示したように、同期アダプターを生成し、アンカー コマンドをサーバー プロバイダーにも設定します。

      [ServiceContract]public interface ISyncService{ [OperationContract] SyncContext ApplyChanges(SyncGroupMetadata groupMetadata, DataSet dataSet, SyncSession syncSession); [OperationContract] SyncContext GetChanges(SyncGroupMetadata groupMetadata, SyncSession syncSession); [OperationContract] SyncSchema GetSchema(Collection tableNames, SyncSession syncSession); [OperationContract] SyncServerInfo GetServerInfo(SyncSession syncSession);}  
       <リ> 

      WCF サービスにアクセスするために ServerSyncProvider を実装するプロキシ クラスを作成しました

      public class DbServerSyncProviderProxy :ServerSyncProvider{ SyncServiceProxy.SyncServiceClient serviceProxy =new SyncServiceProxy.SyncServiceClient(); public override SyncContext ApplyChanges(SyncGroupMetadata groupMetadata, DataSet dataSet, SyncSession syncSession) { return serviceProxy.ApplyChanges(groupMetadata, dataSet, syncSession); }}  
       
    • SyncAgent のインスタンスを作成し、WCF サービスへのアクセスに使用されるプロキシ クラスのインスタンスで RemoteProvider を設定しました。 LocalProvider は SqlExpressClientSyncProvider のインスタンスで設定されます
    • テーブルと同期グループを SyncAgent 構成に追加
    • SyncAgent.Synchronize()



    1. インデックス付きの数値列に「like」を使用したOracleクエリ、パフォーマンスの低下

    2. postgresqlでローカル変数を宣言する方法は?

    3. MySQLDECLAREのSELECTINTO変数により構文エラーが発生しますか?

    4. COUNT('e.id')またはCOUNT(e.id)のクエリとは異なる結果があります