2012-08-09 61 views
0

我正在尝试编写一个程序VB.net这是一个'花哨'的数据库前端。 该程序要做的是将数据库从“服务器”数据库所在的共享位置本地存储在用户计算机上。合并Access数据库

本地和服务器副本都存储到数据集中,然后程序检查服务器副本以查看它最近是否有任何更新。如果有,它只会下载更新以减少带宽。

我想要做的是强制本地数据库承担服务器数据库更改。但是,使用data-adapter.update时,它无法注意到任何更改,因为目前重新加载服务器数据集的方式是清除它,并从头开始重新加载。

是否有任何有效的方法强制服务器数据集到本地,然后强制本地数据集重写数据库在BGW?正如我之前所说的,如果我只是清除本地服务器并将服务器复制到本地服务器,那么data-adapter.update似乎不会保存更改。

道歉,如果我完全错误的方式。任何意见,或指导将不胜感激。

约翰

dsLocalDB.Clear() 'Clear the local dataset 
    dsLocalDB = dbServerDB.Copy 'copy the server dataset to the local dataset 
    LoadData() 'let the application reload all the new records 


    Dim cb As New OleDb.OleDbCommandBuilder(daLocalDB) 'Create a COmmand Builder 
    For i = 1 To TableNames.GetUpperBound(0) 'Loop through all the tables which have been stored as an array 
     For Each row As DataRow In dsLocalDB.Tables(TableNames(i)).Rows 'Loop through the rows, so we can see if it detects modified data. For testing purposes. 
      If row.RowState = DataRowState.Modified Then 'Its found modified data! 
       MsgBox("Found Modified Data Row!") 'Output a message 
       Exit For 'exit the for loop 
      End If 
     Next 
     daLocalDB.Update(dsLocalDB, TableNames(i)) 'Update the local database 
    Next i 
+0

您是否添加了创建和更新所有表格的时间戳? – Fionnuala 2012-08-09 11:31:40

+0

我还没有,但是我打算在每条记录上做这个。但是,这只需要同步到一边。本地副本永远不会被写入,它将始终是只读的。用户只会从中读取数据,它只是该机器设法抓取的最新服务器的“副本”。 – 2012-08-09 11:43:27

+0

也许我不明白?对我来说,最简单的事情就是存储上次更新的日期,然后复制下面的任何内容。 – Fionnuala 2012-08-09 11:46:23

回答

2

你可能想看看这个:

http://www.codeproject.com/Articles/18027/Take-Data-Offline-Using-Microsoft-Synchronization

PS:
如果你打开善意的忠告:你这样做它错了。永远不要保留两个数据库。
同步两个数据库是一个非常微妙的过程。
即使集群应用程序也使用实时同步。
如果你没有几年的经验,你很快就会产生混乱。
阅读文章中的免责声明(无担保,明示,暗示或法定)。

+0

对不起,可能是我写的。我无意保持它们同步。我所需要做的就是确保它可以从服务器副本下载所有更改。并且由于它已经在数据集中执行了,将数据集上传到数据库会更容易,而不是占用更多的带宽? – 2012-08-09 11:52:27