演练:创建偶尔连接的应用程序
“偶尔连接的应用程序”是可能不总是访问远程数据的应用程序。 因为这些应用程序不总是访问远程数据,所以它们使用位于客户端的本地数据库的数据,并会定期同步远程数据库中的数据和本地数据库中的数据。 Microsoft Synchronization Services for ADO.NET(Microsoft.Synchronization.Data 命名空间)帮助实现本地数据库和远程数据库之间的数据同步。 您可以在**“配置数据同步”**对话框中配置此同步。
除了**“配置数据同步”对话框外,还可以使用“数据源配置向导”来配置同步。 在配置类型化数据集的过程中,在该向导的“选择数据库对象”页上选中“启用本地数据库缓存”**选项。 有关更多信息,请参见演练:使用数据源配置向导创建偶尔连接的应用程序。
本演练提供如何开发偶尔连接的应用程序的分步说明。
在本演练中,您将要执行以下任务:
创建新的 Windows 窗体应用程序。
向项目中添加新的**“本地数据库缓存”**。
配置执行以下任务的同步设置:
设置到服务器数据库的数据连接。
配置同步以创建新的本地数据库。
选择您要利用您的应用程序进行同步的数据库中的表。
将 DataGridView 控件添加到窗体,以显示来自本地数据库的数据。
添加代码以启动数据库间的同步。
添加消息框以显示已同步的记录的数目信息。
系统必备
若要完成本演练,需要以下项:
访问 Northwind 示例数据库的 SQL Server 版本。 有关更多信息,请参见如何:安装示例数据库。
在运行 Visual Studio 的计算机上安装的 SQL Server Compact 3.5。
创建 Windows 窗体应用程序
由于您将要在 Windows 窗体中显示数据(以验证同步是否成功),所以本演练的第一步是创建新的 Windows 窗体应用程序。
提示
对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您所使用的 Visual Studio 版本和您所使用的设置。有关更多信息,请参见 Visual Studio 设置。
创建新的 Windows 窗体应用程序
从**“文件”**菜单创建一个新的项目。
将项目命名为 OCSWalkthrough。
提示
由于 Visual Basic 项目和 C# 项目都支持“配置数据同步”对话框,所以可以使用此两种语言中的任意一种语言来创建新项目。
单击**“Windows 窗体应用程序”模板,然后单击“确定”**。 有关更多信息,请参见创建基于 Windows 的应用程序。
然后,就会创建 OCSWalkthrough 项目,并会将其添加到解决方案资源管理器中。
向项目中添加同步文件
创建偶尔连接的应用程序的第二步是向客户端添加(或在客户端创建)本地数据库。 若要添加可与远程数据库同步的数据库,则请将**“本地数据库缓存”模板添加到项目中。 您可以使用“添加新项”**对话框,将本地数据库缓存文件(.sync 文件)添加到项目中。
向项目中添加同步设置文件
在**“项目”菜单上,单击“添加新项”**。
单击**“本地数据库缓存”模板,并在“名称”**框中键入 NorthwindCache.sync。
单击**“添加”**。
然后,NorthwindCache.sync 文件就会添加到解决方案资源管理器中,并会出现**“配置数据同步”**对话框。
配置数据同步
配置数据同步包含以下任务:
提供到远程数据库的数据连接。 这就是服务器连接。
提供到本地数据库的数据连接,或在客户端上创建新的数据库,如本演练中所示。 这就是客户端连接。
从远程连接选择您要在您的应用程序中使用的表。 这些表称为“缓存的表”。
为每个您要添加到本地数据库中的表,选择协调更改所需的列和用于存储删除项的表。 除了跟踪已删除记录的表之外,每个表还需要跟踪新记录和已修改记录的特定列。
设置数据连接
现在,您可以设置服务器连接以连接到远程数据库(您的应用程序的外部数据库)了。 客户端连接可以连接到现有 SQL Server Compact 3.5 数据库,当然您也可以使用**“配置数据同步”**对话框来创建新的本地数据库。 在本演练中,您将要创建到服务器数据库的连接,并保留默认的客户端连接,以在项目中自动创建新的客户端数据库(Northwind.sdf)。
设置服务器数据库和客户端数据库的数据连接
选择到 Northwind 数据库的 SQL Server 版本的**“服务器连接”,或单击“新建”**以创建到 Northwind 数据库的 SQL Server 版本。 有关更多信息,请参见如何:创建到 Northwind 数据库的数据连接。
保留**“客户端连接”的“Northwind.sdf(新建)”**的默认值。 这会创建一个新的 SQL Server Compact 3.5 数据库并会将其添加到项目中。
选择了服务器连接之后,**“配置数据同步”对话框就会在服务器的远程数据库中查询可用表的列表,并会在检索到列表之后启用“添加”**按钮。
提示
请注意,“确定”按钮并未启用。 这是因为尚未选择用于同步的表。 下一节将解释如何添加表,进而启用“确定”按钮。
选择并配置要脱机使用的表
现在,您可以选择要添加到客户端数据库并要利用您的应用程序进行同步的表了。 为每个您要添加到客户端数据库中的表,选择协调更改所需的跟踪列和用于存储删除项的表。 如果您保留默认设置,则**“配置数据同步”**对话框将创建跟踪列和删除项表。 在本演练中,您将使用默认设置。
配置用于本地缓存的表
单击**“添加”以打开“配置供脱机使用的表”**对话框。
选择并选中**“Customers”**表。
保留所有的默认值。 单击**“确定”**。
**“Customers”表就会添加到“缓存的表”**列表中。
在**“配置数据同步”对话框中单击“确定”**。
然后,就会在服务器上创建跟踪列和存储删除项的表。 同时,还会在项目中创建 Northwind.sdf 数据库,并会对其进行首次同步。
在**“数据源配置向导”中选择并选中“Customers”表,然后单击“完成”**。
NorthwindDataSet.xsd 就会添加到项目中,同时所有的对话框都会关闭。
在应用程序中启用同步
完成上述步骤后,数据同步也就配置完毕了。 现在,您的应用程序中包含以下内容:
本地 Northwind 数据库(“Northwind.sdf”)。
数据同步设置信息(“NorthwindCache.sync”)。
由**“数据源配置”向导生成的类型化数据集“NorthwindDataSet.xsd”。 它包含从本地数据库填充的“Customers”**表。
一个包含脚本的**“SQLScripts”**文件夹,这些脚本可用于创建跟踪服务器变化的跟踪列、已删除项表和必要的触发器。
一个包含脚本的**“SQLUndoScripts”**文件夹,这些脚本可用于删除添加到服务器中的跟踪列、已删除项表和必要的触发器。
提示
只有需要在服务器上进行修改时,才会创建 SQL 脚本。 如果服务器已经具有已删除项表和跟踪列,将不会创建任何脚本。
对以下 Microsoft Synchronization Services for ADO.NET DLL 的引用:
Microsoft.Synchronization.Data
Microsoft.Synchronization.Data.Server
Microsoft.Synchronization.Data.SqlServerCe
配置完数据同步后,您还必须将同步功能添加到应用程序中。 具体而言,您需要添加启动同步过程的代码。
首先,通过将**“Customers”节点从“数据源”窗口拖到窗体中,来添加 DataGridView 控件。 DataGridView 将显示本地数据库缓存(位于项目中的 Northwind.sdf 数据库)中的“Customers”**表,以便验证本地数据库和远程数据库之间是否在进行数据同步。 还可以添加一个按钮以启动同步进程。
创建数据绑定窗体以启动并验证数据同步
将**“Customers”节点从“数据源”窗口拖到“Form1”**中。
将一个**“按钮”控件从“工具箱”拖到“Form1”中。 将此按钮的“Name”属性设置为 SynchronizeButton,并将它的“Text”**属性设置为“Synchronize Now”。
双击**“立即同步”**按钮以创建按钮单击事件处理程序,并在代码编辑器中打开该窗体。
添加代码以启动同步进程,然后在数据集中重新填充**“Customers”**表。 事件处理程序中的代码应与下面的代码类似:
提示
声明 syncStats 变量的代码行将在下一节中进行介绍。
' Call the Synchronize method to synchronize ' data between local and remote databases. Dim syncAgent As NorthwindCacheSyncAgent = New NorthwindCacheSyncAgent() Dim syncStats As Microsoft.Synchronization.Data.SyncStatistics = syncAgent.Synchronize() ' After synchronizing the data, refill the ' table in the dataset. Me.CustomersTableAdapter.Fill(NorthwindDataSet.Customers)
// Call the Synchronize method to synchronize // data between local and remote databases. NorthwindCacheSyncAgent syncAgent = new NorthwindCacheSyncAgent(); Microsoft.Synchronization.Data.SyncStatistics syncStats; syncStats = syncAgent.Synchronize(); // After synchronizing the data, refill the // table in the dataset. this.customersTableAdapter.Fill(this.northwindDataSet.Customers);
测试应用程序
测试应用程序
按 F5。
运行应用程序时,使用服务器资源管理器/数据库资源管理器(或其他数据库管理工具)以连接到远程服务器数据库并修改某些记录。
在服务器资源管理器/数据库资源管理器中,查找远程数据库服务器(不是到 Northwind.sdf 的连接)上的 Customers 表。
右击 Customers 表,然后单击**“显示表数据”**。
修改一条或多条记录,然后提交更改。 (导航关闭已修改的行。)
返回到窗体,然后单击**“立即同步”**。
验证对远程数据库的修改是否已同步到本地数据库并显示在网格中。
关闭窗体。 (停止调试。)
检索同步信息
调用**“同步”**方法时,该方法并不仅仅启动同步进程。 **“同步”方法还会返回“SyncStatistics”**对象,您可以从该对象访问有关同步的信息。
访问同步统计信息
在代码编辑器中打开**“Form1”**,然后在 SynchronizeButton_Click 事件处理程序的底部,接着先前步骤所添加的代码添加以下代码:
MessageBox.Show("Changes downloaded: " & syncStats.TotalChangesDownloaded.ToString)
MessageBox.Show("Changes downloaded: " + syncStats.TotalChangesDownloaded.ToString());
测试应用程序
测试应用程序
按 F5。
运行应用程序时,使用服务器资源管理器/数据库资源管理器(或其他数据库管理工具)以连接到远程服务器数据库并修改某些记录。
在服务器资源管理器/数据库资源管理器中,查找远程数据库服务器(不是到 Northwind.sdf 的连接)上的 Customers 表。
右击 Customers 表,然后单击**“显示表数据”**。
修改一条或多条记录,然后提交更改。 (导航关闭已修改的行。)
返回到窗体,然后单击**“立即同步”**。
此时,将显示一个包含已同步记录的信息的消息框。
验证对远程数据库的修改是否已同步到本地数据库并显示在网格中。
后续步骤
根据应用程序的要求,当在应用程序中配置本地数据库缓存后,可能还需要执行其他一些步骤。 例如,您可以对此应用程序进行以下增强:
实现双向同步,以便将本地数据库缓存中的更改上载到服务器中。 有关更多信息,请参见如何:将本地数据库和远程数据库配置为双向同步。
将客户端应用程序与本地数据库缓存一起部署。 有关更多信息,请参见演练:将偶尔连接的客户端应用程序与本地数据库一起部署。