如何:在应用程序中配置数据同步

更新:2007 年 11 月

如果应用程序需要使用远程数据库中的数据,而又不必持续从该数据库中检索数据(或该数据并非始终可用),则可以使用本地数据库将该数据存储在应用程序的客户端计算机上。接下来,可以使用“配置数据同步”对话框配置 Microsoft Synchronization Services for ADO.NET,以便将应用程序设置为在本地数据库和远程数据库之间同步数据。

从 Visual Studio 2008 SP1 开始,除了“配置数据同步”对话框外,还可以使用“数据源配置向导”来配置同步。在配置类型化数据集的过程中,在该向导的“选择数据库对象”页上选中“启用本地数据库缓存”选项。有关更多信息,请参见 演练:使用数据源配置向导创建偶尔连接的应用程序

注意 在智能设备项目中,不能从“数据源配置向导”启动同步设计器。有关更多信息,请参见偶尔连接的应用程序(设备)。另外,在 Visual Studio 2008 SP1 中,已经添加了对于 SQL Server 2008 更改跟踪功能的支持。在从“配置数据同步”对话框或“数据源配置向导”中配置同步时,可以启用 SQL Server 2008 更改跟踪。有关更多信息,请参见如何:将数据同步配置为使用 SQL Server 更改跟踪

例如,假设有一个库存应用程序,该应用程序需要使用数据库中的多个表中的数据。各个零件的库存数量都是不断变化的重要数据,因此应用程序应反映数据库中的当前值。同时,应用程序还会显示可用的运输公司的列表,但这个列表是很少发生变化的。这些可用的运输公司的信息存储在托运人表中,不需要在每次从数据库中查询数据时都检索该表。如果将此 Shippers 表存储在本地数据库缓存中,就可以减少应用程序对远程数据库执行的不必要的往返访问次数。因此,可以考虑将不经常更改的数据(或按已知时间表更改的数据)存储在本地数据库缓存中。

本地数据库缓存使用 SQL Server Compact 3.5 数据库在本地存储数据。您可以将现有的 SQL Server Compact 3.5 数据库用作本地数据库缓存。如果您还没有本地数据库,可以设置“配置数据同步”对话框,以创建一个新的本地数据库。

在向应用程序中添加本地数据库并完成“配置数据同步”对话框的设置后,还必须向应用程序中添加启动同步的代码。成功同步数据后,还必须添加代码,以便从本地数据库重新填充数据集中的表。

说明:

“配置数据同步”对话框仅可用于为下载方案配置 Microsoft Synchronization Services for ADO.NET。这意味着,在您使用“配置数据同步”对话框配置数据同步之后,调用 Microsoft.Synchronization.Data.SyncAgent.Synchronize 将只能利用在远程数据库上找到的更改来更新本地数据库。对本地数据库上的数据所进行的更改将不会上载到远程数据库。在使用“配置数据同步”对话框配置数据同步之后,可以用编程方式在同步期间启用上载(双向同步)。有关更多信息,请参见如何:将本地数据库和远程数据库配置为双向同步

向项目中添加本地数据库缓存

通过在项目中添加 .sync 文件并使用“配置数据同步”对话框对其进行配置,可以将应用程序配置为在本地缓存数据。您可以使用“添加新项”对话框向项目中添加 .sync 文件。

以下过程提供了配置数据同步所涉及的基本步骤。有关使用实际数据的示例,请参见演练:创建偶尔连接的应用程序演练:创建偶尔连接的智能设备应用程序

说明:

对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您使用的 Visual Studio 版本及设置。有关更多信息,请参见Visual Studio 设置

配置数据同步

  1. 在“项目”菜单上单击“添加新项”。

  2. 单击“本地数据库缓存”模板。

  3. 保留默认名称“LocalDataCache1.sync”,或提供其他名称。

  4. 单击“添加”。

    随即会将 .sync 文件添加到项目中,并打开“配置数据同步”对话框。

  5. 将“服务器连接”设置为要连接到的远程数据库。

  6. 将“客户端连接”设置为将在本地存储数据的本地 SQL Server Compact 3.5 数据库。如果没有本地数据库,可以保留“数据库名称.sdf (新建)”的默认设置,以便在项目中创建一个新数据库。新数据库的名称将基于“服务器连接”中的数据库名称。

    说明:

    默认情况下,“确定”按钮处于禁用状态。在向“缓存的表”区域中添加表后,将启用该按钮。

  7. 单击“添加”以打开“配置供脱机使用的表”对话框,然后选择并配置要添加到本地数据库缓存中的数据库表。

  8. 选择要添加到本地数据库缓存中的数据库表,然后配置下面的每项设置:

    • 要下载的数据:

      首次同步之后的新更改和增量更改

      此设置用于从服务器中检索自上次同步数据以来修改过的记录。首次调用同步时,将下载整个表。

      每次更新整个表

      此设置用于删除本地表并将其替换为服务器上的版本。

    • 使用下列项比较更新

      请将它设置为表中选定用于跟踪上次记录更新时间的列名。默认情况下,任何定义为日期时间类型或时间戳的列都将出现在此列表中。如果表中未包含用于跟踪已修改的记录的列,可以保留“LastEditDate (新建)”的默认设置,该设置会为您创建跟踪列。

    • 使用下列项比较插入

      请将它设置为选定表中用于跟踪向表添加新记录的时间的列名。默认情况下,任何定义为日期时间类型或时间戳的列都将出现在此列表中。如果表中未包含用于跟踪新记录的列,可以保留“CreationDate (新建)”的默认设置,该设置会为您创建跟踪列。

    • 将已删除的项移至

      请将它设置为数据库服务器上用于存储已删除记录的表。默认情况下,任何名为 表名_Deleted 或 表名_Tombstone 的表都将出现在此列表中。如果数据库不包含用于存储已删除项的表,可以保留“表名_Tombstone (新建)”的默认设置,该设置将为您创建已删除项的表。

      说明:

      请为要配置的每个表配置这些设置,以供脱机使用。

  9. 默认情况下,“脚本生成”选项将自动设置为生成并运行用于配置数据库服务器的服务器端脚本。如果您不需要这些脚本,或者无权访问数据库服务器,可以清除此选项并手动运行脚本,或修改您的表。如果不需要在服务器上进行更改,将不会生成任何脚本。

    说明:

    这些脚本将执行下列操作:向选定的表中添加跟踪列;创建用于存储已删除项的表;添加一些必要的触发器,以跟踪对设置用于本地缓存的表进行的插入、更新和删除操作。

  10. 单击“确定”。

  11. 单击“显示代码示例”以打开“代码示例”对话框,其中提供了启动同步过程的代码段。您可以将此代码段复制到剪贴板中,然后再插入程序内。

  12. 此外,还可以设置“高级”选项。

    利用“配置数据同步”对话框中的“高级”选项提供的设置,可以控制是逐个同步每个表,还是在单个事务中同步所有表。这些选项还允许为 N 层应用程序分离代码。

    1. “在单个事务中同步表”。默认情况下并不选中此选项,所有表都是逐个进行同步的。如果遇到错误,则只对发生错误的表回滚更改。如果选中此选项,将在单个事务中同步所有表。如果遇到错误,则会为所有表回滚全部更改。

    2. “创建同步组件”。默认情况下,会同时为客户端和服务器生成同步组件。您可以将此选项设置为“仅客户端”或“仅服务器”,以满足应用程序的需要。

    3. “服务器项目位置”。默认情况下,将在当前项目中生成服务器的同步组件。请将此选项设置为在解决方案的任意 Visual Basic 或 Visual C# 项目中生成服务器的同步组件。

    4. “客户端项目位置”。默认情况下,将在当前项目中生成客户端的同步组件。请将此选项设置为在解决方案的任意 Visual Basic 或 Visual C# 项目中生成客户端的同步组件。

完成“配置数据同步”对话框的设置后,必须向应用程序中添加启动同步的代码。

说明:

同步数据时,将更新本地数据库,而不会更新数据集中的表或应用程序中的任何其他对象。请记住,应以本地数据库中已更新的数据重新加载应用程序数据源。例如,调用 TableAdapter.Fill 方法以本地数据库中已更新的数据加载数据集的数据表。

启动同步

  • 如果您已在前面的部分中复制了“代码示例”对话框中的代码,现在只需将其粘贴到应用程序中即可。否则,您可以在应用程序中要启动同步过程的任意位置插入下面的代码:

    ' Call SyncAgent.Synchronize() to initiate the synchronization process.
    ' Synchronization only updates the local database, not your project's data source.
    Dim syncAgent As LocalDataCache1SyncAgent = New LocalDataCache1SyncAgent()
    Dim syncStats As Microsoft.Synchronization.Data.SyncStatistics = syncAgent.Synchronize()
    
    ' Add code here to refill your application's data source
    ' with the updated data from the local database.
    
    // Call SyncAgent.Synchronize() to initiate the synchronization process.
    // Synchronization only updates the local database, not your project's data source.
    LocalDataCache1SyncAgent syncAgent = new LocalDataCache1SyncAgent();
    Microsoft.Synchronization.Data.SyncStatistics syncStats =
    syncAgent.Synchronize();
    
    // Add code to refill your application's data source
    // with the updated data from the local database.
    

请参见

任务

演练:创建偶尔连接的应用程序

演练:将偶尔连接的客户端应用程序与本地数据库一起部署

偶尔连接的数据示例

演练:创建偶尔连接的智能设备应用程序

概念

偶尔连接的应用程序概述

偶尔连接的应用程序(设备)

其他资源

偶尔连接的应用程序

修订记录

日期

修订

原因

2008 年 7 月

添加了有关使用“数据源配置向导”配置数据同步的信息。

SP1 功能更改。

2008 年 7 月

添加了有关智能设备项目中的同步的说明。

SP1 功能更改。