2008-11-10 67 views
1

我正在使用SQL Server 2005 CE框架3.5並試圖在我的手持和我的SQL Server之間使用合併複製。當我運行代碼進行同步時,它似乎永遠坐下來,當我在代碼中放置斷點時,它永遠不會超過對Synchronize()的調用。Sql Server CE 3.5合併複製同步掛起

如果我看一下sql server中的複製監視器,它會達到它表示訂閱不再同步並且不顯示任何錯誤的地步。因此,我假設這意味着同步完成。

http://server/virtualdirectory/sqlcesa35.dll?diag不報告任何問題。

這是我第一次嘗試任何手持設備的開發,所以我可能做了些傻事。但是,SQL Server似乎報告了成功的同步。

任何幫助將不勝感激,因爲我花了這麼多年!

這是我的代碼。

const string DatabasePath = @"SD Card\mydb.sdf"; 
var repl = new SqlCeReplication 
       { 
        ConnectionManager = true, 
        InternetUrl = @"http://server/virtualdirectory/sqlcesa35.dll", 
        Publisher = @"servername", 
        PublisherDatabase = @"databasename", 
        PublisherSecurityMode = SecurityType.DBAuthentication, 
        PublisherLogin = @"username", 
        PublisherPassword = @"password", 
        Publication = @"publicationname", 
        Subscriber = @"PPC", 
        SubscriberConnectionString = "Data Source=" + DatabasePath 
       }; 
try 
{ 
    Cursor.Current = Cursors.WaitCursor; 
    if (!File.Exists(DatabasePath)) 
    { 
     repl.AddSubscription(AddOption.CreateDatabase); 
    } 
    repl.Synchronize(); 
    MessageBox.Show("Successfully synchronised"); 
} 
catch (SqlCeException e) 
{ 
    DisplaySqlCeErrors(e.Errors, e); 
} 
finally 
{ 
    repl.Dispose(); 
    Cursor.Current = Cursors.Default; 
} 

回答

0

我已經發現,它只是需要很長時間才能將數據複製到物理磁盤。儘管sql服務器複製已完成,但它仍將數據複製到SD卡。

我通過減少我複製的表的數量來確定這一點,並且我得到了更直接的響應(以及另一個錯誤,但與此問題無關)。

不管怎樣,謝謝:)

1

可以做,以加快同步操作的另一件事是指定在你的PDA的主要程序存儲器(而不是在SD卡中的實例)的數據庫文件路徑。您應該看到速度提高了4倍(意味着Sync現在只需要25%)。

如果您的PDA上的主程序內存不足,則可以使用System.IO.File.Move()在Synchronize調用後將文件移動到SD卡。我知道這似乎有點奇怪,但同步到程序存儲器並複製到SD卡然後直接同步到SD卡要快得多。