【问题标题】:Keeping data in local database when using Microsoft Sync Framework使用 Microsoft Sync Framework 时将数据保存在本地数据库中
【发布时间】:2023-04-06 13:36:02
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    同步框架不会删除已同步的行。唯一会删除行的情况是需要同步删除行。您是否检查过您的应用程序是否真的在重新创建您的客户端数据库?

    【讨论】:

    • 据我所见,客户端数据库已创建,双向同步工作正常。我遇到的问题是,如果我离线启动应用程序,在与远程数据库同步之前数据不可用。
    • 很抱歉,但我不了解问题所在。如果说客户端数据库同步成功,那为什么下线没有数据呢?客户端数据库中的数据去哪了?
    • 离线时,我们可以将数据添加到本地缓存,并在有连接时与远程数据库同步 - 正如预期的那样。如果应用程序在没有连接到远程数据库的情况下关闭并再次启动,则本地数据库不包含任何记录,因为它需要连接才能从远程数据库中检索数据。使数据离线的唯一方法是在线打开应用程序以允许同步发生。在我的例子中,可能会出现在断开连接之前无法在线运行应用程序的情况,因为用户可能会长时间离线。
    • 仔细检查您的代码,正如我所提到的,Sync Fx 不会自行清除数据库。如果您关闭应用并重新启动它,请查看它是否在您启动应用时重新创建客户端数据库。
    • 感谢您的帮助,我浏览了代码,发现当远程连接不可用并且从未执行代码来填充表格时,它没有引发异常。我将使用解决方案编辑我的原始问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2011-10-22
    • 2010-12-20
    • 2012-12-09
    相关资源
    最近更新 更多