首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Microsoft Sync Framework 快速入門:ADO.NET 同步服務實現 SQL Server 與 SQL CE 離線同步

     編輯:關於.NET

Microsoft Sync Framework (MSF) 提供統一同步平台,Sync Services for ADO.NET 專注關係數據庫離線同步。本文演示 Visual Studio 向導「Local Database Cache」在 WinForms 中 5 分鐘生成 SQL Server Express ↔ SQL CE 3.5 雙向同步原型,含表篩選、變更追踪表、同步代理調用全流程。

環境準備

  • 安裝 Microsoft Synchronization Services for ADO.NET (v1.0/v2.0)。
  • 安裝 SQL Server Compact 3.5 (非 3.0,.sdf 格式不兼容)。
  • SQL Server Express 建立測試庫 `TestDB`,兩張表 `t1(f1 int PK, f2 nvarchar(50))`、`t2(f1 int PK, f2 datetime)`。

向導生成步驟

  1. WinForms 專案 → 右鍵添加新項目 → **Local Database Cache** (生成 `.sync` 文件)。
  2. 配置服務器連接字符串 (SQL Express),選擇同步表 `t1`、`t2`。
    向導自動:
    ▸ 生成本地 `.sdf` (SQL CE 3.5)
    ▸ 為每張表添加 `LastEditDate`、`CreationDate` 列
    ▸ 創建 `_Tracking` / `_Tombstone` 變更追踪表
    ▸ 生成 `*SyncAgent` 類、`*Cache` 數據集、`TableAdapterManager`。
    ▸ 彈出 DataSet 向導,勾選所有表/列生成強類型 DataSet。

生成代碼結構

// 同步代理
public partial class LocalDataCache1SyncAgent : SyncAgent
{
    public LocalDataCache1SyncAgent() { /* 初始化 Server/Client Provider */ }
}

// 強類型 DataSet
public partial class TestDbDataSet : DataSet { ... }

// TableAdapters
public partial class t1TableAdapter : TableAdapter { ... }
public partial class TableAdapterManager : TableAdapterManager { ... }

前端調用代碼 (Form1.cs)

public partial class Form1 : Form
{
    private TestDbDataSet _dataSet = new TestDbDataSet();
    private t1TableAdapter _t1Adapter = new t1TableAdapter();
    private TableAdapterManager _mgr = new TableAdapterManager();

    public Form1() { InitializeComponent(); }

    private void Form1_Load(object sender, EventArgs e)
    {
        _t1Adapter.Fill(_dataSet.t1); // 本地緩存加載
        dataGridView1.DataSource = _dataSet.t1;
    }

    private void btnSync_Click(object sender, EventArgs e)
    {
        // 1. 保存本地更改到緩存
        _mgr.UpdateAll(_dataSet);

        // 2. 執行同步 (雙向)
        var agent = new LocalDataCache1SyncAgent();
        SyncStatistics stats = agent.Synchronize();

        // 3. 從服務器拉取最新合併到 UI
        _dataSet.t1.Merge(_t1Adapter.GetData());

        MessageBox.Show($"上傳:{stats.UploadChangesApplied} 下載:{stats.DownloadChangesApplied} 衝突:{stats.ConflictsOccurred}");
    }
}

關鍵組件說明

組件職責
TestDbDataSet強類型內存緩存,斷開連接模式操作數據
t1TableAdapter封裝 Select/Insert/Update/Delete 命令,橋接 DataSet 與數據庫
TableAdapterManager協調多 TableAdapter 的層級更新 (父子表事務一致性)
LocalDataCache1SyncAgent同步協調器,內含 ServerProvider (SQL Express) + ClientProvider (SQL CE)

測試驗證

  1. SQL Express 插入/修改/刪除 `t1` 數據。
  2. 運行程序 → 點擊同步 → 本地 `.sdf` (VS Server Explorer 打開) 與服務器一致。
  3. 離線修改本地數據 → 同步 → 服務器反映變更 (衝突默認服務器勝,可自定義)。

遷移到 Web/移動端注意事項

  • WebForms/ASP.NET:無向導支援,需手寫 `SqlSyncProvider`/`SqlCeSyncProvider` 配置代碼,本文系列後續將講解。
  • Windows Mobile/CE:同步代理相同,但需設備安裝 SQL CE 3.5 CAB 包 (ARM/x86 對應平台)。
  • 衝突解決:實現 `ResolveConflicts` 事件或自定義 `ConflictResolver`。

向導生成代碼雖有侷限性 (僅 WinForms、固定同步方向),但作為原型驗證、學習同步架構、小型離線應用極其高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved