我有一个允许输入测试结果的应用程序。应用程序需要允许用户在离线时输入数据,然后再同步到远程数据库。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 并且填充数据网格的代码在 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)