偶尔连接的应用程序概述
“偶尔连接的应用程序”是一种使用远程数据库中的数据、但却不总是能够访问远程数据库的应用程序。 当远程数据库可随时访问时,如果不断从远程数据库中查询很少发生变化的数据(例如状态列表或产品类别)可能缺乏效率,也可使用偶尔连接的应用程序。 在这些情况下,应用程序可以使用位于客户端上的本地数据库数据,并定期与服务器上的远程数据库进行数据同步。
换句话说,如果您的应用程序需要来自远程数据库的数据,且不必不断从该远程数据库检索这些数据,则您可以使用本地数据库缓存将这些数据存储在客户端计算机上,或者直接存储在您的应用程序中。 例如,假设有一个库存应用程序,该应用程序需要使用数据库中的多个表中的数据。 任何单个项的库存数量都是不断变化的重要数据,所以(如果可能)该应用程序应始终反映数据库中的当前值。 同时,该应用程序还要显示可用的运输公司的列表,但这个列表是很少发生变化的。 这些可用的运输公司的信息存储在托运人表中,不需要在每次从数据库中查询数据时都检索该表。 您可以将此托运人表存储到本地数据库缓存中,以此来减少您的应用程序对远程数据库的不必要的往返访问的次数。 因此,除了为需要偶尔连接的应用程序使用本地数据库缓存外,还可以考虑将很少变化或按照已知时间表更改的数据存储到本地数据库缓存中。
您可以对缓存进行配置,以存储单个表、表集合、或从表查询到的特定记录(例如,拥有特定销售代表的客户)。
客户端数据库与服务器数据库之间的数据同步是由 Microsoft Synchronization Services for ADO.NET(Microsoft.Synchronization.Data 命名空间)帮助实现的。 您可以通过使用**“配置数据同步”对话框,或通过在创建类型化数据集时使用“数据源配置向导”**,在 Visual Studio 中以可视化的方式配置同步。 有关更多信息,请参见如何:在应用程序中配置数据同步和演练:使用数据源配置向导创建偶尔连接的应用程序。
此外,Visual Studio 支持 SQL Server 2008 中的更改跟踪功能。 在从**“配置数据同步”**对话框或数据源配置向导中配置同步时,可以启用 SQL Server 2008 更改跟踪。 有关更多信息,请参见如何:将数据同步配置为使用 SQL Server 更改跟踪。
SQL Azure 中的本地数据库缓存限制
可以使用本地数据库缓存将 SQL Azure 中找到的数据与本地 SQL Compact 数据库同步。 不过,基于云计算的服务(如 SQL Azure)将利用多租户环境(在此环境中多个客户共享相同的硬件),但现有数据提供程序不会针对此环境进行优化。 为了防止一个客户受到由另一个客户发起的工作负荷的影响,SQL Azure 使用限制机制来限制向单个请求授予的资源量。 具体而言,SQL Azure 将限制事务的可执行时间以及单个事务可以出现的记录增长量。
应对基本方案和少量数据使用这些提供程序。 如果尝试同步大量数据,则同步操作可能因限制问题而导致失败。 如果发生限制问题,则无法减少更改数量以避免同步失败。 此外,这些提供程序不是需要双向同步的更高级方案的理想选择。
有关为涉及 SQL Azure 的方案简化的组件的详细信息,请参见 https://go.microsoft.com/fwlink/?LinkId=180745。
Synchronization Services API (Microsoft.Synchronization.Data)
Microsoft Synchronization Services for ADO.NET 是专为偶尔连接的应用程序设计的。 您可利用它,通过双层、n 层和基于服务的体系结构,在异类源之间同步数据。 Synchronization Services API 不仅复制数据库及其架构,而且提供了一组组件,可在数据服务和本地存储区之间同步数据。 应用程序越来越多地用于移动客户端,如便携式计算机和设备,这些移动客户端与中央服务器之间的网络连接是不稳定或不可靠的。 因此,对这些应用程序来说,使用位于客户端的数据本地副本是很重要的。 同样重要的是,还应在网络连接可用时,同步数据的本地副本与中央服务器上的数据。 Synchronization Services API 仿效 ADO.NET 数据访问 API,可为您提供一种直观的数据同步方式。 它可向为偶尔连接的环境创建应用程序提供一个创建应用程序的逻辑扩展,您可以利用该逻辑扩展来获得稳定的网络连接。
安装 Synchronization Services API 和文档
Synchronization Services API 不属于 .NET Framework, 它作为 SQL Server Compact 3.5 安装的一部分进行安装。(默认情况下,安装 Visual Studio 时会安装 SQL Server Compact 3.5。)默认情况下,不安装 Synchronization Services 文档。 因此,只有将“帮助”配置为联机使用时,才能查看该文档。 若要安装 Synchronization Services 文档以便于本地使用,必须先从 Microsoft Synchronization Services for ADO.NET Books Online(Microsoft Synchronization Services for ADO.NET 联机丛书)网站下载帮助集合。
使用 Visual Studio 将数据同步合并到应用程序中
为便于将数据同步合并到应用程序中,Visual Studio 提供了一个**“本地数据库缓存”**模板。 “本地数据库缓存”可用作新的项目项模板。 (在“项目”菜单上,单击“添加新项”)。有关更多信息,请参见如何:在应用程序中配置数据同步。
除了使用**“本地数据库缓存”模板外,还可以使用“数据源配置向导”来配置同步。 在配置类型化数据集的过程中,在该向导的“选择数据库对象”页上选中“启用本地数据库缓存”**选项。 有关更多信息,请参见演练:使用数据源配置向导创建偶尔连接的应用程序。
添加**“本地数据库缓存”可打开“配置数据同步”对话框。 您可以使用此对话框来提供有关客户端和服务器的特定信息,以便设置所需的同步组件。 本地数据库缓存使用位于客户端上的 SQL Server Compact 3.5 数据库在本地存储数据。 您可以将现有的 SQL Server Compact 3.5 数据库用作本地数据库缓存。 如果您尚没有本地数据库,则可以使用“配置数据同步”对话框来创建一个新的本地数据库。 若要创建新的本地 SQL Server Compact 3.5 数据库,可以设置“客户端连接”(在“配置数据同步”对话框中),以便基于从“服务器连接”**选择的表创建新的 SQL Server Compact 3.5 数据库。
提示
您可以使用“配置数据同步”对话框仅为下载方案配置 Microsoft Synchronization Services for ADO.NET。 这意味着,在使用此对话框配置数据同步之后,调用 Microsoft.Synchronization.Data.SyncAgent.Synchronize 将只能利用在远程数据库上找到的更改来更新本地数据库。 对本地数据库上的数据所进行的更改将不会上载到远程数据库。 使用“配置数据同步”对话框配置完数据同步后,您就可以以编程方式,在同步期间启用上载(双向同步)了。 有关更多信息,请参见如何:将本地数据库和远程数据库配置为双向同步。
为同步配置远程数据库
若要成功进行数据同步,则要进行同步的远程数据库中的每个表还需要一些附加项。 **“配置数据同步”**对话框会创建一些对远程数据库运行的 SQL 脚本,以创建必需的对象(下表列出了这些对象)。 同步设计器创建的所有 SQL 脚本都保存在您的项目的 SQLScripts 文件夹中。
提示
默认情况下,将运行由“配置数据同步”对话框生成的 SQL 脚本。 通过设置“配置供脱机使用的表”对话框中的“脚本生成”选项,可以选择是否生成并执行这些脚本。
“配置数据同步”对话框的默认行为是在关闭时自动运行脚本并更新远程数据库。 如果您不想自动运行脚本,请清除“此对话框关闭后执行脚本”复选框。 此外,如果远程数据库已经具有所需的跟踪列、触发器和已删除项表,则将不会生成脚本。 换句话说,如果不需要对远程数据库进行更改,则就不会创建脚本。
下表列出了远程数据库所需的附加项,并提供了每个附加项的说明:
远程数据库上的每个已同步的表的附加项 |
说明 |
---|---|
LastEditDate 列 |
在每个要同步的表上,此列应该是 DateTime 或 TimeStamp。 将该列与客户端上的 LastEditDate 列进行比较,就可以识别自从上次同步调用以来服务器中的已修改记录。 |
CreationDate 列 |
在每个要同步的表上,此列应该是 DateTime 或 TimeStamp。 将该列与客户端上的 CreationDate 列进行比较,就可以识别自从上次同步调用以来添加到服务器中的记录。 |
已删除项表 (TableName_Deleted) |
项从数据库服务器上的表中删除后,将被移到此表中。 此操作的目的在于记载自从上次同步调用以来从服务器删除的记录。 要同步的每个表都需要一个已删除项表,以跟踪从远程表中删除的记录。 |
DeletionTrigger (TableName_DeletionTrigger) |
每次从服务器数据库表删除记录时,此触发器都会运行。 已删除的记录会被移到已删除项表中。 之所以要将它们移到已删除项表中,是因为客户端数据库中存在的、服务器数据库中不存在的记录,可能会被视为新记录,并被添加回服务器中。 Synchronization Services 可检查已删除项表,以确定它应该从客户端数据库中删除已删除的记录,而不是将该记录添加回服务器数据库中。 |
InsertTrigger (TableName_InsertTrigger) |
添加新记录时,此触发器会以当前的日期和时间填充 CreationDate 列。 |
UpdateTrigger (TableName_UpdateTrigger) |
修改现有记录时,此触发器会以当前的日期和时间填充 LastEditDate 列。 |
从应用程序启动同步进程
在**“配置数据同步”**对话框中提供了所需的信息后,请将代码添加到您的应用程序中以启动同步。 同步数据更新的是本地数据库,而不是数据集中的表或是您的应用程序中的任何其他对象,理解这一点是很重要的。 请记住,应以本地数据库中已更新的数据重新加载应用程序数据源。 例如,调用 TableAdapter.Fill 方法以使用本地数据库中已更新的数据加载数据集的数据表。
请参见
任务
概念
SQL Server Compact 3.5 和 Visual Studio