0

テスト結果の入力を可能にするアプリケーションがあります。アプリケーションは、ユーザーがオフライン時にデータを入力し、後でリモートデータベースに同期できるようにする必要があります。これを実現するために、MicrosoftSyncフレームワークが使用されます。

ただし、実行されるテストは、テストケースのリストやデバイスのリストなど、他の多くのデータベースに保存されているデータに依存しています。これらのリストは、アプリケーションを介して入力され、データベースに保存されます。これも同期フレームワークを使用して実行されます。

知っておく必要があるのは、必要なリストのデータがローカルにキャッシュされたデータベースに永続的に残り、アプリケーションがオフラインのときに取得できるようにすることです。うまくいけば、実行時に接続文字列を変更して、クエリがローカルデータベースに送信され、テストケースやデバイスなどを取得できるようにすることができます。

1つの解決策は、ユーザーがサイトを離れる前に同期して最新のデータを確実に取得することですが、これが常に可能であるとは限りません。

編集

同期が完了すると、ローカルデータベースがクリアされ、行われたすべての変更がリモートデータベースにプッシュされ、ローカルのキャッシュバージョンから削除/削除されたように見えます。アプリケーションをオフラインで開いた場合、ローカルバージョンはリモートデータベースから最新のデータをダウンロードできないため、最新のデータにアクセスする方法はありません。

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)
4

1 に答える 1

0

同期フレームワークは、同期された行を削除しません。行を削除するのは、行の削除を同期する必要がある場合のみです。アプリケーションが実際にクライアント データベースを再作成しているかどうかを確認しましたか?

于 2013-01-08T02:44:45.933 に答える