一步步教你配置SQLSERVER合并復(fù)制(八)代碼部分(使用.NETCompactFramework

字號:

這個系列的翻譯也拖了一段時間,現(xiàn)在決定一次性將它理清了。關(guān)于合并復(fù)制服務(wù)器的配置在前面的翻譯文章中都已經(jīng)詳細地論述完了,現(xiàn)在終于到了訂閱者是如何使用我們配制好的合并復(fù)制了。下面的代碼是針對.NET CompactFramework的,其實整個合并復(fù)制的過程中,安裝和配置占了95%的時間,而創(chuàng)建訂閱僅僅需要5%的時間,合并復(fù)制的這個特征減小了我們敲代碼時出現(xiàn)錯誤的幾率,將更多地工作移植到了服務(wù)器上來,這樣如果有錯誤發(fā)生的話,我們求助微軟的幾率要比求助開發(fā)者的幾率要大得多。
    在.Net CompactFramework中,合并復(fù)制我們只需要一個類SqlCeReplication,它是位于System.Data.SqlServerCe中的。
    using System.Data.SqlServerCe;
    下面是示例代碼:
    SqlCeReplication repl = null;
    try
    {//實例化一個SqlCeReplication對象
    repl = new SqlCeReplication();
    //設(shè)置IIS上的SQL MOBILE SERVER代理
    repl.InternetUrl = YourServerToolsUrl;
    //訪問ServerTools的用戶
    repl.InternetLogin = YourWebUser;
    //訪問ServerTools的用戶密碼
    repl.InternetPassword = YourWebPwd;
    //發(fā)布復(fù)制的數(shù)據(jù)庫服務(wù)器名稱
    repl.Publisher = YourPublisher;
    //發(fā)布復(fù)制的數(shù)據(jù)庫名稱
    repl.PublisherDatabase = YourPublisherDatabase;
    //發(fā)布合并復(fù)制的名稱
    repl.Publication = YourPublication;
    //用戶過濾同步數(shù)據(jù)的主機名稱
    repl.HostName = UserID;
    //發(fā)布復(fù)制的驗證模式
    repl.PublisherSecurityMode = SecurityType.NTAuthentication;
    //訂閱者的名稱
    repl.Subscriber = new Random().Next().ToString();
    //訂閱者的數(shù)據(jù)庫的連接字符串
    repl.SubscriberConnectionString = ConnectionString;
    //如果數(shù)據(jù)庫不存在的話就下載新的數(shù)據(jù)庫
    if (!DatabaseExists())
    {
    repl.AddSubscription(AddOption.CreateDatabase);
    }
    repl.Synchronize();
    }
    finally
    {
    repl.Dispose();
    }
    考試大提示:當你完成一切工作,如果設(shè)備初始化時未加入數(shù)據(jù)庫時,下載快照文件時,會先在設(shè)備上創(chuàng)建一個初始化的本地數(shù)據(jù)庫,這個初始化的本地數(shù)據(jù)庫是20KB,然后數(shù)據(jù)庫的內(nèi)容就會被下載并插入到這個空數(shù)據(jù)庫當中,如果這時候剛剛好網(wǎng)絡(luò)斷開或者是其他原因造成不能下載數(shù)據(jù)庫的時候,你會發(fā)現(xiàn)你的設(shè)備上的數(shù)據(jù)庫只有20KB。所以說在同步數(shù)據(jù)庫之后檢查下數(shù)據(jù)庫的大小是否大于20KB,如果大于20KB的話就表明你已經(jīng)成功地將服務(wù)器上的數(shù)據(jù)下載到設(shè)備上來,否則的話就表明同步失敗。
    同步復(fù)制因為在服務(wù)器端做了太多的工作以至于我們在碰到錯誤的時候會顯得束手無策,這些都是需要我們彼此去交流探討關(guān)于同步工作的一些問題的解決方案。