用于合并复制的销售订单示例

更新日期: 2006 年 4 月 14 日

此自述文件详细介绍了如何安装和运行销售订单示例。同时也详细介绍了所有与该示例有关的已知问题。

应用场景

此示例的重点在于用来向移动用户传递数据的合并复制拓扑,而且还示范了 SQL Server 2005 中的合并复制的可编程性功能。此示例是基于 Windows 窗体的应用程序,它使用标准的 Microsoft 数据访问技术和合并复制,使得销售人员能够在定期与总部同步的同时,维护自己的本地数据。运行各种版本 SQL Server 2005 的订阅服务器均支持该示例。发布还支持 SQL Server Compact Edition 订阅服务器。有关此示例应用场景的详细信息,请参阅Sales Orders Sample Scenario

语言

  • C#
  • Transact-SQL

功能

销售订单示例示范了合并复制的以下功能:

  • 复制管理对象 (RMO)。
  • 参数化行筛选器。
  • 预计算分区。
  • 客户端请求的分区快照。
  • 基于项目类型的性能优化。
  • SQL Server Compact Edition 和 Express Edition 的订阅服务器。
  • 自动标识范围管理。
  • 业务逻辑处理程序。
  • Web 同步(可选)。

有关如何在示例中示范这些复制功能的详细信息,请参阅Sales Orders Sample Implementation Details

必备组件

在运行此示例之前,请确保安装了下列软件:

  • SQL Server 2005 Service Pack 1 (SP1),包括下列可选安装组件:
    • SQL Server Database Services(包括复制)
    • 客户端连接组件
    • 编程模型
    • 开发工具(包括 SDK)
    • AdventureWorks 示例 OLTP 数据库。该示例数据库随 SQL Server 2005 提供,也可以从 SQL Server 开发人员中心获取。
    • SQL Server 2005 示例。这些示例随 SQL Server 2005 提供,也可以从 SQL Server 开发人员中心获取。有关详细信息,请参阅 安装示例
  • .NET Framework SDK 2.0 或 Microsoft Visual Studio 2005。您可以免费获取 .NET Framework SDK。有关详细信息,请参阅安装 .NET Framework SDK
    ms160955.note(zh-cn,SQL.90).gif注意:
    若要生成初始快照,必须将 SQL Server 2005 SP1 应用于发布服务器。若要在没有应用 SP1 的 SQL Server 2005 发布服务器上使用此示例,必须先在没有 ON DELETE CASCADE 子句的 SalesOrderHeader 表中删除并重新创建 FK_SalesOrderDetail_SalesOrderHeader_SalesOrderID FOREIGN KEY 约束。

所需的权限

配置和运行销售订单示例所需的权限取决于复制的安全要求,这些权限如下所述:

  • InstallSalesOrdersSample.bat 可配置复制、创建 AdvWorksSalesOrders 发布以及生成初始快照,若要运行它,您的 Windows 帐户必须是发布服务器上 sysadmin 固定服务器角色的成员。
  • 销售订单示例可执行各种数据库引擎和复制任务,包括创建 AdventureWorksLocal 数据库、创建本地订阅以及运行合并代理以初始化、重新初始化或同步订阅。若要在订阅服务器上成功运行示例可执行文件 (SalesOrders.exe),您的 Windows 帐户必须至少具有订阅服务器上的 CREATE DATABASE 权限。
    ms160955.note(zh-cn,SQL.90).gif注意:
    当本地数据库和订阅存在时,您的 Windows 帐户必须至少是位于要运行应用程序的订阅服务器上的 AdventureWorksLocal 数据库的 db_owner 固定数据库角色的成员。
  • 若要初始化订阅并与发布服务器同步,用于连接发布服务器(或使用 Web 同步时的 Web 服务器)的 Windows 帐户必须满足以下要求:
    • 在发布服务器上,有一个与发布数据库中的用户相关联的有效登录名。
    • 在分发服务器上,有一个与(guest 用户)分发数据库中的用户相关联的有效登录名。
    • 该帐户是用于 AdvWorksSalesOrders 发布的发布访问列表 (PAL) 的成员。

生成和配置示例

若要生成示例项目并配置复制拓扑,您需要执行以下操作:

  • 在发布服务器上,运行复制安装脚本。
  • (可选)配置 Internet 信息服务 (IIS) 服务器,以支持合并复制的 Web 同步。如果不这样做,将无法使用该示例的 Web 同步功能。
  • 在订阅服务器上,修改该示例的 app.config 文件中的配置设置。
  • 在订阅服务器上,使用 Visual Studio 2005 或 .NET Framework 2.0 SDK 生成该示例。
  • 在订阅服务器上,将 BusinessLogic.dll 程序集的一个副本放在 C:\Program Files\Microsoft SQL Server\90\COM 目录中。当使用 Web 同步时,也必须将 BusinessLogic.dll 程序集的一个副本放在 Web 服务器上的 C:\Program Files\Microsoft SQL Server\90\COM 目录中。

在发布服务器上配置销售订单示例

  1. 请确保已安装 AdventureWorks 示例数据库并且已附加该数据库。如果未附加该数据库,请参阅 SQL Server 联机丛书中的安装 AdventureWorks 示例数据库和示例

  2. 请确保已安装 SQL Server 数据库引擎示例。

    有关详细信息,请参阅 安装示例

  3. 请确保 SQL Server 代理正在运行。您可以通过 SQL Server Management Studio 中的对象资源管理器来查看此服务的状态和启动此服务。

  4. 导航到销售订单示例脚本的安装位置。默认位置为 C:\Program Files\Microsoft SQL Server\90\Samples\Replication\Merge\SalesOrders\Scripts。

  5. (可选)在发布服务器或用于 Web 同步的服务器上配置安全套接字层 (SSL)。IIS 服务器和所有订阅服务器之间的通信需要采用 SSL。若要配置 SSL,请指定一个供 IIS 服务器使用的服务器证书。

  6. 执行 InstallSalesOrdersSample.bat,在出现提示时,输入将运行快照代理作业的 Windows 帐户的登录名(格式为“DOMAIN\login”,区分大小写)和密码。这将调用 sqlcmd.exe 来执行 CreateAdvWorksSalesOrdersPublication.sql,进行下列操作:

    • 检查是否在本地服务器上配置了复制。如果没有配置,则使用本地的分发服务器(它使用分发数据库)将其配置为发布服务器。
    • 删除并重新创建用于在客户端进行数据访问的存储过程和用户定义函数。
    • 删除并重新创建 AdvWorksSalesOrders 发布。
    • 将项目添加到发布。
    • 在分发服务器上注册业务逻辑处理程序。
    • 启动快照代理作业以生成初始快照。

    批处理文件也可以在发布服务器上自动配置虚拟目录以支持 Web 同步。如果您选择在安装过程中不在发布服务器上配置虚拟目录,或者如果您计划使用单独的 Web 服务器,则必须在使用该示例的 Web 同步功能之前运行配置 Web 同步向导。

  7. (可选)运行配置 Web 同步向导以配置 IIS 服务器来支持 Web 同步。如果 InstallSalesOrdersSample.bat 成功创建了虚拟目录,或者如果您将不使用 Web 同步,请跳过这一步。有关使用此向导的完整说明,请参阅如何为 Web 同步配置 IIS

  8. 在继续进行之前,请确保 AdvWorksSalesOrders 发布的快照代理作业已成功完成。您可以使用复制监视器查看此作业的状态。有关使用复制监视器查看快照代理作业的状态的信息,请参阅 SQL Server 联机丛书中的如何查看与发布相关的代理的信息并执行此代理的任务(复制监视器)主题。

在订阅服务器上生成和配置销售订单示例

  1. 在命令提示符下,导航到 SQL Server 2005 示例安装目录。默认位置为 C:\Program Files\Microsoft SQL Server\90\Samples。

  2. 在 .NET Framework 或 Microsoft Visual Studio 2005 命令提示符下执行以下命令:

    sn -k SampleKey.snk

    ms160955.note(zh-cn,SQL.90).gif注意:
    如果之前已为另一示例创建了此密钥,则可跳过此步骤。
  3. 导航到 Microsoft Visual C# 中的销售订单示例解决方案的安装位置。默认位置为 C:\Program Files\Microsoft SQL Server\90\Samples\Replication\Merge\SalesOrders\CS。

  4. 在 Visual Studio 2005 中打开 SalesOrders.sln 解决方案文件。

  5. 生成项目。

  6. 在项目输出文件夹中,编辑 SalesOrders.exe.config 文件并进行以下更改:

    • 用本地服务器的名称替换订阅服务器键的值。
    • 用之前配置为发布服务器的服务器名称替换发布服务器键的值。
    • (可选)当使用 Web 同步连接到发布服务器时,替换 WebSynchronizationUrl 键的值。这也可以在运行时执行。
    • (可选)在使用“连接时同步”功能时,请使用 SyncWhenConnectedInterval 键设置同步间隔(秒)。
    ms160955.note(zh-cn,SQL.90).gif注意:
    复制不支持将 localhost 用作服务器名称。
  7. 将 BusinessLogic.dll 程序集的一个副本放在 C:\Program Files\Microsoft SQL Server\90\COM 目录中。

  8. (可选)如果使用 Web 同步,请将 BusinessLogic.dll 程序集的一个副本放在 Web 服务器上的 C:\Program Files\Microsoft SQL Server\90\COM 目录中。

运行示例

运行销售订单示例和同步数据

  1. 请确保在发布服务器和订阅服务器上已启用远程连接(TCP/IP 或命名管道),并且 SQL Server 代理服务正在运行。

  2. (可选)在订阅服务器上,按照How to: Configure Web Synchronization for Merge Replication (Replication Transact-SQL Programming)中“在订阅服务器上配置客户端证书”的说明连接到处于诊断模式的 Web 服务器,以此来测试 Web 同步连接。

    ms160955.note(zh-cn,SQL.90).gif注意:
    如果在使用 Web 同步时出现 HTTP 错误,请打开 Internet Explorer,从“工具”菜单中依次选择“Internet 选项”“连接”“局域网设置”。确保禁用“自动检测设置”
  3. 通过 Visual Studio 2005 或命令提示符启动 SalesOrders.exe。当应用程序第一次运行时,将创建订阅数据库和订阅,还将启动合并代理以初始化订阅。

  4. 在订阅数据初始化之后,将加载**“销售订单”**窗体,显示属于销售人员“adventure-works\garrett1”的现有订单列表。

  5. 使用**“销售订单”**窗体可以对销售数据进行以下更改:

    • 编辑销售订单信息。
    • 向销售订单中添加新项。
    • 从销售订单删除某项。
    • 更改销售订单中某项的定购数量。
  6. 在**“同步”**菜单中选择同步方法以同步订阅。

  7. (可选)选中**“连接时同步”**以自动同步订阅。使用 app.config 文件中的 SyncWhenConnectedInterval 键为后台同步设置同步间隔。

    ms160955.note(zh-cn,SQL.90).gif注意:
    在 Microsoft 平台上运行时,“连接时同步”功能不可用。有关详细信息,请参阅Sales Orders Sample Implementation Details

使用销售订单示例的高级同步选项

  1. 在**“同步”菜单的“高级”**中,选择以下选项之一:

    • (可选)选择重新初始化选项以重新初始化订阅。
    • (可选)选择**“Web 同步选项”**并提供用于通过安全 HTTPS 连接访问 Web 服务器的 Internet URL 和 Windows 身份验证凭据。若要使用此选项,您必须已为 Web 同步配置 IIS 服务器。
      ms160955.note(zh-cn,SQL.90).gif注意:
      Web 同步不支持仅上载或仅下载同步。启用 Web 同步时,“仅上载数据”菜单项将禁用。
    • (可选)选择**“获取订阅状态”**以查看最近合并代理会话的结果。

删除示例

以下是删除销售订单示例的过程。

仅删除订阅

  1. 在订阅服务器上,执行以下 Transact-SQL 脚本删除请求订阅。

    -- This batch is executed at the Subscriber to remove 
    -- the Sales Orders sample subscription.
    DECLARE @publisher AS sysname;
    
    -- change this value to the name of the Publisher server.
    SET @publisher = N'PUBSERVER'; 
    
    USE [AdventureWorksLocal]
    EXEC sp_dropmergepullsubscription 
      @publisher = @publisher, 
      @publisher_db = N'AdventureWorks',
      @publication = N'AdvWorksSalesOrders';
    GO
    
  2. 在发布服务器上,执行以下 Transact-SQL 脚本撤消对请求订阅的注册。

    -- This batch is executed at the Publisher to remove 
    -- the Sales Orders sample subscription.
    DECLARE @subscriber AS sysname;
    
    -- change this value to the name of the Subscriber server.
    SET @subscriber = N'SUBSERVER'; 
    
    USE [AdventureWorks]
    EXEC sp_dropmergesubscription 
      @publication = N'AdvWorksSalesOrders', 
      @subscriber = @subscriber, 
      @subscriber_db = N'AdventureWorksLocal';
    GO
    

删除销售订单示例

  1. 在发布服务器上,导航到销售订单示例脚本的安装位置。默认位置为 C:\Program Files\Microsoft SQL Server\90\Samples\Replication\Merge\SalesOrders\Scripts。

  2. 执行批处理文件 RemoveSalesOrdersSample.bat。

  3. 当出现提示时,键入“Y”,然后按 Enter,以删除发布服务器上的所有复制对象,删除订阅数据库中的所有复制对象并卸载发布服务器上的发布和分发。

    ms160955.note(zh-cn,SQL.90).gif重要提示:
    使用此脚本将删除所有的复制基础结构。如果您创建了使用此发布服务器或分发服务器的其他发布,请不要执行 DropAdvWorksSalesOrdersPublication.sql,而应当手动删除 AdvWorksSalesOrders 发布。有关详细信息,请参阅 SQL Server 联机丛书中的如何删除发布 (SQL Server Management Studio)How to: Delete a Publication (Replication Transact-SQL Programming)
  4. 在订阅服务器上,对 AdventureWorksLocal 数据库执行 sp_removedbreplication (Transact-SQL)

  5. 将数据库上下文更改为 master 数据库,然后执行 DROP DATABASE AdventureWorksLocal

注释

提供的示例仅供教学使用。这些示例不是针对生产环境设计的,也没有在生产环境中进行测试。对于这些示例,Microsoft 不提供相关的技术支持。未经系统管理员许可,不能将示例应用程序和程序集与生产 SQL Server 数据库或报表服务器相连接或一起使用。

请参阅

概念

复制示例

其他资源

Planning for Replication Programming
复制开发人员信息中心

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 4 月 14 日

更改的内容:
  • 已将要求更新到 SQL Server 2005 SP1。
  • 添加了有关如何在 SQL Server 2005 发布服务器上运行此示例的信息注释。

2005 年 12 月 5 日

更改的内容:
  • 更新了部署步骤。
  • 更新了密钥创建和部署信息,从而反映示例更新内容。