使用Microsoft Sync Framework时将数据保存在本地数据库中

时间:2013-01-07 09:29:16

标签: sql vb.net microsoft-sync-framework

我有一个允许输入测试结果的应用程序。应用程序需要允许用户在脱机时输入数据,然后再同步到远程数据库。 Microsoft Sync框架用于实现此目的。

但是,所执行的测试依赖于存储在许多其他数据库中的数据,例如测试用例列表和设备列表。这些列表通过应用程序填充并存储在数据库中。这也是使用同步框架进行的。

我需要知道的是,我是否可以确保所需列表的数据保留在本地缓存的数据库中永久,以便在应用程序脱机时检索它们。希望我可以在运行时更改连接字符串,以确保将查询定向到本地数据库以检索测试用例和设备等。

一种解决方案是让用户在离开现场之前进行同步,以确保他们拥有最新数据,但这并非总是可行。

修改

在我看来,一旦同步完成,本地数据库就会被清除,所有已经发生的更改都会被推送到远程数据库,并从本地缓存版本中删除/删除。如果应用程序是脱机打开的,则本地版本无法从远程数据库下载最新数据,因此无法访问最新数据。

我曾尝试使用Microsoft.Synchronization.Data.ChangesSelectedEventArgs事件在每次更改时在本地保存数据,但似乎不会持续存在。

Private Sub LocalDeviceCacheServerSyncProvider_ChangesSelected(ByVal sender As Object, ByVal e As Microsoft.Synchronization.Data.ChangesSelectedEventArgs)

    If e.Context.DataSet.Tables.Contains("DeviceListTable") Then
        Dim dataTable = e.Context.DataSet.Tables("DeviceListTable")
        For j As Integer = 0 To dataTable.Rows.Count - 1
            Dim row As DataRow = dataTable.Rows(j)


            If row.RowState = DataRowState.Added Then

                dataTable.Rows.Add(dataTable.Rows(j))
            End If
        Next
    End If

End Sub

修改 问题是,当远程服务器连接不可用时,不会抛出错误,并且填充datagridview的代码行永远不会被执行。 为了解决这个问题,使用了try catch,填充datagrid的代码在try / ctach语句之外执行。

    Try
        Dim syncAgent As LocalCacheSyncAgent = New LocalCacheSyncAgent()
        Dim syncStats As Microsoft.Synchronization.Data.SyncStatistics = syncAgent.Synchronize()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

    Me.ReferenceListTableTableAdapter.Fill(Me.EMSCalResourcesDataSet.ReferenceListTable)

1 个答案:

答案 0 :(得分:0)

Sync Framework不会删除已同步的行。删除行的唯一时间是需要同步删除行。你检查过你的应用程序是否真的在重新创建客户端数据库吗?