65.9K
CodeProject 正在变化。 阅读更多。
Home

SQL Server 2000 和 SQL Server CE 之间的合并复制

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.22/5 (5投票s)

2006年4月24日

3分钟阅读

viewsIcon

49497

一篇关于如何在不同 PPC 上配置 SQL Server 2000 和 SQL CE 以与 SQL Server 2000 同步其数据的文章。

引言

本文将演示如何在 SQL Server 2000 和 SQL Server CE 之间创建复制环境。

本文旨在供开发人员和软件配置人员使用。

背景

以下文章假定您已理解复制的概念。
复制可以在许多不同的环境中进行使用,而有些环境则必须使用复制。当然,您总是可以编写自己的复制引擎,但如果已有 SQL Server,何必费此周折呢?SQL Server 可以满足您的一切需求。
(是的,我认为 SQL Server 是位女士,您最好善待她!)

让我们开始吧

本文将分为三个部分。首先,配置您的服务器。然后,我将逐步介绍发布向导,以便您能够理解。最后,我将提供一段可用于同步数据库的简单代码。

准备服务器

我将快速带过这一点,这只是在您考虑同步之前需要进行的软件和配置工作。

在您的服务器上运行 IIS
安装 SQL Server 2000 及其 SP4
安装 SQL CE SQL2000 SP4(我不知道是否需要再说一遍,但总之,也需要在您的服务器上安装)
安装 SQL CE 后,会启动一个配置应用程序,请勿更改任何内容!(当然,如果您知道自己在做什么,为什么还要阅读本文呢?)该配置应用程序将创建一个虚拟目录,客户端将通过该目录连接到服务器。只需一路点击“下一步”即可。
注册 sscerp20.dll 库(开始 -> 运行,regsvr32 完整的库路径

一切就绪!您现在可以配置 SQL Server 了。在此之前,请尝试访问 https:///sql/sscesa20.dll。您看到什么了吗?您的浏览器上应该会显示“SQL Server CE Server Agent”。

配置复制数据库

有一个精美的向导将帮助您完成此过程。请严格按照我的指示操作!
打开 SQL Server 企业管理器,右键单击“复制”下的“发布”,然后单击“新建发布”。
看到向导了吗?好的,在第一个屏幕上“仔细阅读!!!”然后点击“下一步”。
选择要复制的数据库,然后“下一步”。
选择“合并复制”,但请务必阅读说明……然后“下一步”。
在这种情况下,请选择“运行 SQL Server CE 的设备”,然后“下一步”。
选择要同步的表,或直接点击“发布所有表”,然后“下一步”。
看到警告标志了吗?它会告诉您,SQL Server 将在要同步的每个表中创建一个 guid 列,除非您的表中已存在 guid 列。
发布名称,输入您想要的任何名称……记住它!然后“下一步”。
只需让 SQL Server 按指定方式创建发布,然后“下一步”。
阅读整个表单,然后“完成”。

开始复制

您已拥有复制数据所需的一切。现在,我将向您展示一些 .net 1.1 (C#) 代码来控制您的复制过程。

    
private void getSyncReady()
{
    _repl = new SqlCeReplication();
    _repl.InternetUrl = "http://192.168.1.2/sql/sscesa20.dll"; //The URL to the server
    _repl.Publisher = "SQLSERVER"; //The name of the SQL Server
    _repl.PublisherLogin = "loginuser"; //The database user 
    _repl.PublisherPassword = "********"; //The database user's password
    _repl.PublisherSecurityMode = SecurityType.DBAuthentication;
    _repl.Publication = "PubName"; //Your publication name, remeber?
    _repl.PublisherDatabase = "Northwind"; //The database name
    _repl.SubscriberConnectionString = "Provider=Microsoft.SQLSERVER.OLEDB.CE.2.0;Data Source=" + strDBFile; //strDBFile contains the path to the database on the device
    _repl.Subscriber = "PPC"; //Some name
    
    if (!System.IO.File.Exists(strDBFile))
    {
        MessageBox.Show("La aplicacion requiere sincronización\r\nPor favor aguarde","Replicator",MessageBoxButtons.OK,MessageBoxIcon.Asterisk,MessageBoxDefaultButton.Button1);
        _repl.AddSubscription(AddOption.CreateDatabase);
        sync();
    }
}

getSyncReady 方法在我“智能设备应用程序”启动时运行。请查看 File.Exists 子句。我使用复制功能在应用程序首次运行时在设备上创建数据库。

private void sync()
{
    Cursor.Current = Cursors.WaitCursor;
        try
    {
        _repl.Synchronize();
        MessageBox.Show("Base sincronizada","Replicator",MessageBoxButtons.OK,MessageBoxIcon.Asterisk,MessageBoxDefaultButton.Button1);
    }
    finally
    {
        Cursor.Current = Cursors.Default;
    }
}


之后,我只需在需要同步数据时调用 sync 方法即可。是不是很酷?!

关注点

发生了什么?我做了您说的一切,但遇到了错误。是的!我知道,狗屁事情时有发生,尤其是在尝试复制时,一开始会让人很沮丧。请检查您的权限、数据库用户、他们的角色、IIS 用户等。
但相信我,它是有效的。您可以搜索您的错误消息,或者给我发电子邮件(我会帮您搜索 ;-))。

您成功了吗?我是否遗漏了什么?请告知我,您可以通过 SebastianGomezCorrea[at]gmail.com 与我联系。

© . All rights reserved.