Compartilhar via


Demonstra Passo a passo: Estendendo o cache do banco de dados local para sincronização bidirecional de suporte

No Visual Studio 2008, a Cache do banco de dados local configura um SQL Server Compact 3.5 banco de dados e um conjunto de classes parcial permitem Microsoft Synchronization Services for ADO.NET. Porque Visual Studio gera classes parcial, você pode escrever código para adicionar funcionalidade de sincronização e ainda manter a capacidade de exibir e alterar as configurações no Configurar sincronização de dados caixa de diálogo.Para obter mais informações sobre classes parcial, consulte Como: Dividir uma classe em classes Parcial.

Por padrão, a Configurar sincronização de dados caixa de diálogo permite que você configure Synchronization Services apenas para baixar. Isso significa que, depois de configurar sincronização de dados, chamada Synchronize() apenas irá baixar alterações do servidor para o banco de dados do cliente. Uma das maneiras mais comuns para estender o código de sincronização é configurar a sincronização bidirecional.Isso permite que você faz carregar de alterações do cliente ao servidor.Para habilitar a sincronização bidirecional, recomendamos que você estender o código gerado das seguintes maneiras:

  • conjunto a direção sincronização bidirecional.

  • Adicione código para manipular conflitos de sincronização.

  • Remova colunas de acompanhamento de comandos de sincronização do servidor.

Pré-requisitos

Antes de iniciar esta explicação passo a passo, você deve concluir Demonstra Passo a passo: Criando um aplicativo conectado ocasionalmente. Depois de concluir essa explicação passo a passo, você tem um projeto que contém um Cache do banco de dados local e um aplicativo Windows Forms que permite que você baixar as alterações da tabela Northwind Customers a um banco de dados do SQL servidor Compact.Agora você está pronto para carregar esta solução passo a passo e adicionar recursos bidirecional.

Observação:

Seu computador pode mostrar diferentes nomes ou localizações para alguns dos elementos de interface do usuário do Visual Studio nas instruções a seguir. A edição do Visual Studio que você possui e as configurações que você usa determinam esses elementos. Para obter mais informações, consulte Configurações do Visual Studio.

Para abrir a solução OCSWalkthrough

  1. Abra Visual Studio.

  2. Sobre o Arquivo menu, abra uma projeto ou solução existente e localizar a solução OCSWalkthrough.Este é o arquivo OCSWalkthrough.sln.

Definindo a direção de sincronização

The Configurar sincronização de dados caixa de diálogo permite que você conjunto o SyncDirection() propriedade para qualquer um DownloadOnly() ou Snapshot(). Para habilitar a sincronização bidirecional, defina o SyncDirection() propriedade para Bidirectional() para cada tabela que você deseja ativar para fazer upload das alterações.

Para conjunto a direção de sincronização

  1. clicar com o botão direito do mouse em NorthwindCache.sincronização e clique em Exibir código.A primeira vez que você fizer isso, Visual Studio cria um arquivo NorthwindCache sob o nó NorthwindCache.sincronização no O gerenciador de soluções.Este arquivo contém uma classe parcial NorthwindCacheSyncAgent e você pode adicionar outras classes conforme necessário.

  2. No arquivo de classe NorthwindCache, adicione código para que o NorthwindCacheSyncAgent.OnInitialized() método é semelhante o código a seguir:

    partial void OnInitialized()
    {
        this.Customers.SyncDirection = 
        Microsoft.Synchronization.Data.SyncDirection.Bidirectional;
    }
    
    Private Sub OnInitialized()
        Me.Customers.SyncDirection = 
        Microsoft.Synchronization.Data.SyncDirection.Bidirectional
    End Sub
    
  3. Abra o Form1 no Editor de Códigos.

  4. No arquivo Form1, modifique a linha de código no SynchronizeButton_Click manipulador de eventos para que ele inclua carregar e fazer o baixar de estatísticas:

    MessageBox.Show("Changes downloaded: " +
        syncStats.TotalChangesDownloaded.ToString() + 
        Environment.NewLine +
        "Changes uploaded: " + 
        syncStats.TotalChangesUploaded.ToString());
    
    MessageBox.Show("Changes downloaded: " & _
        syncStats.TotalChangesDownloaded.ToString & _
        Environment.NewLine & _
        "Changes uploaded: " & _
        syncStats.TotalChangesUploaded.ToString)
    

Testando o aplicativo

Agora o aplicativo é configurado para executar os carregamentos e downloads durante a sincronização.

Para testar o aplicativo

  1. Pressione F5.

  2. No formulário, atualizar um registro e clicar no Salvar botão (o ícone do disco na barra de ferramentas).

  3. clicar Sincronizar agora.

  4. Será exibida uma caixa de mensagem que contém informações sobre registros sincronizados.As estatísticas mostram que uma linha foi carregada e foi baixado, mesmo que nenhuma alteração foi feita no servidor.O baixar adicional ocorre porque as alterações do cliente são ecoadas para o cliente depois que elas são aplicadas no servidor.Para obter mais informações, consulte "Determinando qual cliente feitas um dados alterar" emComo: Use uma alterar de personalizar acompanhamento sistema.

  5. clicar OK para fechar a caixa de mensagem, mas deixe o aplicativo em execução.

Agora você irá alterar o mesmo registro no cliente e servidor para forçar um conflito (uma violação de simultaneidade) durante a sincronização.

Para testar o aplicativo e forçar um conflito

  1. No formulário, atualização um registro e, em seguida, clicar no Salvar botão.

  2. Com o aplicativo ainda está sendo executado, use Gerenciador de servidores/Banco de dados Explorer (ou outra ferramenta de gerenciamento de banco de dados) para se conectar ao banco de dados do servidor.

  3. Para demonstrar o comportamento padrão para resolução de conflito em servidor Explorer/Banco de dados Explorer, atualizar o mesmo registro atualizado no formulário, mas altere-o para um valor diferente e confirmar a alterar.(Mover desativar a linha modificada).

  4. Vá para o formulário e, em seguida, clicar Sincronizar agora.

  5. Verifique se a atualização no banco de dados de grade e o servidor de aplicativo.Observe que a atualização feita no servidor substituiu a atualização no cliente.Para obter informações sobre como alterar esse comportamento de resolução de conflito, consulte a próxima seção deste tópico, "Adicionando código para manipular sincronização conflitos".

Adicionando código para tratar os conflitos de sincronização

In Synchronization Services, uma linha está em conflito se tiver sido alterada no cliente e servidor entre as sincronizações. Synchronization Services Fornece um conjunto de recursos que podem ser usados para detectar e resolver conflitos. Nesta seção, você irá adicionar manipulação básica conflitos em que é atualizada da mesma linha de no cliente e servidor.Outros tipos de conflitos incluem uma linha que está sendo excluída em um banco de dados e atualizadas no outro ou linhas com chaves primárias duplicadas sejam inseridas em ambos os bancos de dados.Para obter mais informações sobre como detectar e resolver conflitos, consulte Como: Manipular dados conflitos e erros.

Observação:

O código de exemplo fornece um exemplo básico de manipulação de conflito.A maneira na qual lidar com conflitos depende dos requisitos de seu aplicativo e a lógica de negócios.

Adicione código para manipular o servidor ApplyChangeFailed evento e o cliente ApplyChangeFailed evento. Esses eventos são gerados quando uma linha não pode ser aplicada por causa de um conflito ou erro.Os métodos que lidam com esses eventos verificar o tipo de conflito e especificar essa atualização de cliente / conflitos de atualização do servidor devem ser resolvidos pelo forçar a alterar do cliente para serem gravados no banco de dados do servidor.O comando de sincronização que aplica atualizações ao banco de dados do servidor inclui lógica para reconhecer quando uma alterar deve ser forçada.Este comando está incluído no código na próxima seção deste tópico, "Remover servidor acompanhamento colunas de comandos de sincronização".

As etapas executadas para adicionar tratamento de conflito diferem, dependendo se você estiver usando translation from VPE for Csharp ou Visual Basic.

Para adicionar tratamento de conflito

  • Se você estiver usando translation from VPE for Csharp, adicione código ao NorthwindCache.cs e Form1.cs.Em NorthwindCache.cs, adicione o seguinte código após o participante da classe NorthwindCacheSyncAgent:

    public partial class NorthwindCacheServerSyncProvider
    {
    
        partial void OnInitialized()
        {
            this.ApplyChangeFailed +=
                new System.EventHandler<Microsoft.Synchronization.Data.ApplyChangeFailedEventArgs>
                (NorthwindCacheServerSyncProvider_ApplyChangeFailed);
        }
    
        private void NorthwindCacheServerSyncProvider_ApplyChangeFailed(object sender,
            Microsoft.Synchronization.Data.ApplyChangeFailedEventArgs e)
        {
    
        if (e.Conflict.ConflictType ==
            Microsoft.Synchronization.Data.ConflictType.ClientUpdateServerUpdate)
            {
    
            // Resolve a client update / server update conflict by force writing
            // the client change to the server database.
            System.Windows.Forms.MessageBox.Show("A client update / server update conflict " +
                                                    "was detected at the server.");
            e.Action = Microsoft.Synchronization.Data.ApplyAction.RetryWithForceWrite;
    
            }
    
        }
    }
    
    public partial class NorthwindCacheClientSyncProvider
    {
    
        public void AddHandlers()
        {
            this.ApplyChangeFailed +=
                new System.EventHandler<Microsoft.Synchronization.Data.ApplyChangeFailedEventArgs>
                (NorthwindCacheClientSyncProvider_ApplyChangeFailed);
        }
    
        private void NorthwindCacheClientSyncProvider_ApplyChangeFailed(object sender,
            Microsoft.Synchronization.Data.ApplyChangeFailedEventArgs e)
        {
    
            if (e.Conflict.ConflictType ==
                Microsoft.Synchronization.Data.ConflictType.ClientUpdateServerUpdate)
            {
    
                // Resolve a client update / server update conflict by keeping the 
                // client change.
                e.Action = Microsoft.Synchronization.Data.ApplyAction.Continue;
    
            }
    
        }
    }
    

    Em Form1.cs, modifique o código no SynchronizeButton_Click manipulador de eventos, de modo que ele chama o AddHandler método que você adicionou ao NorthwindCache.cs na etapa anterior:

    NorthwindCacheSyncAgent syncAgent = new NorthwindCacheSyncAgent();
    
    NorthwindCacheClientSyncProvider clientSyncProvider =
        (NorthwindCacheClientSyncProvider)syncAgent.LocalProvider;
    clientSyncProvider.AddHandlers();
    
    Microsoft.Synchronization.Data.SyncStatistics syncStats = 
        syncAgent.Synchronize();
    
  • Se você estiver usando Visual Basic, em NorthwindCache.vb, adicione o seguinte código após a End Class demonstrativo para o NorthwindCacheSyncAgent classe.

    Partial Public Class NorthwindCacheServerSyncProvider
    
        Private Sub NorthwindCacheServerSyncProvider_ApplyChangeFailed( _
            ByVal sender As Object, ByVal e As  _
            Microsoft.Synchronization.Data.ApplyChangeFailedEventArgs) _
            Handles Me.ApplyChangeFailed
    
            If e.Conflict.ConflictType = _
                Microsoft.Synchronization.Data.ConflictType.ClientUpdateServerUpdate Then
    
                ' Resolve a client update / server update conflict by force writing
                ' the client change to the server database.
                MessageBox.Show("A client update / server update" & _
                    " conflict was detected at the server.")
                e.Action = Microsoft.Synchronization.Data.ApplyAction.RetryWithForceWrite
    
            End If
    
        End Sub
    
    End Class
    
    Partial Public Class NorthwindCacheClientSyncProvider
    
        Private Sub NorthwindCacheClientSyncProvider_ApplyChangeFailed( _
            ByVal sender As Object, ByVal e As  _
            Microsoft.Synchronization.Data.ApplyChangeFailedEventArgs) _
            Handles Me.ApplyChangeFailed
    
            If e.Conflict.ConflictType = _
                Microsoft.Synchronization.Data.ConflictType.ClientUpdateServerUpdate Then
    
                ' Resolve a client update / server update conflict by keeping the 
                ' client change.
                e.Action = Microsoft.Synchronization.Data.ApplyAction.Continue
    
            End If
    
        End Sub
    
    End Class
    

Para sincronizar e exibir a resolução de conflitos

  1. Pressione F5.

  2. No formulário, atualização um registro e, em seguida, clicar no Salvar botão.

  3. In Gerenciador de servidores/Banco de dados Explorer, atualizar o mesmo registro atualizado no formulário, mas altere-o para um valor diferente e, em seguida, confirmar a alterar.

  4. Vá para o formulário e, em seguida, clicar Sincronizar agora.

  5. Verifique se a atualização no banco de dados de grade e o servidor de aplicativo.Observe que a atualização feita no cliente substituiu a atualização no servidor.

Removendo o servidor acompanhamento colunas de comandos de sincronização

Quando o Cache do banco de dados local é criada, as colunas que são usadas para controlar as alterações no banco de dados do servidor são baixadas para o cliente.(Nesta explicação passo a passo, as colunas são CreationDate e LastEditDate.) Para oferecer suporte a sincronização bidirecional e ajudam a garantir a convergência dos dados no cliente e servidor, remova essas colunas os comandos SQL que aplicar alterações ao banco de dados do servidor.Você também pode remover as colunas de comandos que seleciona alterações do servidor para aplicar o cliente, mas isso não é necessário.Devido a restrições em algumas alterações de esquema no banco de dados do cliente, de colunas não podem ser descartadas.Para obter mais informações sobre os comandos de sincronização, consulte Como: Especifique o instantâneo, baixar, carregar e sincronização bidirecional.

Observação:

Se você usar. SQL Server 2008 acompanhamento de alterações, colunas de acompanhamento não são adicionadas a suas tabelas. Nesse caso, não é necessário alterar os comandos que aplicar alterações ao servidor.

O código a seguir redefine dois comandos que são definidos sistema autônomo propriedades no SyncAdapter objeto para a tabela Customers: the InsertCommand() e UpdateCommand() Propriedades. Os comandos que foram gerados pelo Configurar sincronização de dadoscaixa de diálogo continha referências a colunas CreationDate e LastEditDate.O código a seguir, esses comandos são redefinidos no OnInitialized método para o CustomersSyncAdapter classe. The DeleteCommand() propriedade não será redefinida porque ele não afeta a coluna CreationDate ou LastEditDate.

As variáveis em cada comando SQL são usadas para passar dados e metadados entre Synchronization Services, o cliente e o servidor. As seguintes variáveis de sessão são usadas em comandos a seguir:

  • @sync\_row\_count: Retorna o número de linhas que foram afetados pela última operação no servidor. In SQL Server bancos de dados, @@rowcount Fornece o valor dessa variável.

  • @sync\_force\_write: Usado para forçar o aplicativo de uma alterar que falhou devido a um conflito ou erro.

  • @sync\_last\_received\_anchor: Usado para definir o conjunto de alterações a serem sincronizados durante uma sessão.

Para obter mais informações sobre variáveis de sessão, consulte Como: Use variáveis de sessão.

Para remover as colunas de acompanhamento da sincronização comandos

  • Adicione o seguinte código à NorthwindCache classe (NorthwindCache.vb ou NorthwindCache.cs) após o End Class demonstrativo para o NorthwindCacheServerSyncProvider classe.

    public partial class CustomersSyncAdapter
    {
    
        partial void OnInitialized()
        {
    
        // Redefine the insert command so that it does not insert values 
        // into the CreationDate and LastEditDate columns.
        System.Data.SqlClient.SqlCommand insertCommand = new _
            System.Data.SqlClient.SqlCommand();
    
        insertCommand.CommandText = "INSERT INTO dbo.Customers ([CustomerID], [CompanyName], " +
            "[ContactName], [ContactTitle], [Address], [City], [Region], [PostalCode], " +
            "[Country], [Phone], [Fax] )" +
            "VALUES (@CustomerID, @CompanyName, @ContactName, @ContactTitle, @Address, @City, " +
            "@Region, @PostalCode, @Country, @Phone, @Fax) SET @sync_row_count = @@rowcount";
        insertCommand.CommandType = System.Data.CommandType.Text;
        insertCommand.Parameters.Add("@CustomerID", System.Data.SqlDbType.NChar);
        insertCommand.Parameters.Add("@CompanyName", System.Data.SqlDbType.NVarChar);
        insertCommand.Parameters.Add("@ContactName", System.Data.SqlDbType.NVarChar);
        insertCommand.Parameters.Add("@ContactTitle", System.Data.SqlDbType.NVarChar);
        insertCommand.Parameters.Add("@Address", System.Data.SqlDbType.NVarChar);
        insertCommand.Parameters.Add("@City", System.Data.SqlDbType.NVarChar);
        insertCommand.Parameters.Add("@Region", System.Data.SqlDbType.NVarChar);
        insertCommand.Parameters.Add("@PostalCode", System.Data.SqlDbType.NVarChar);
        insertCommand.Parameters.Add("@Country", System.Data.SqlDbType.NVarChar);
        insertCommand.Parameters.Add("@Phone", System.Data.SqlDbType.NVarChar);
        insertCommand.Parameters.Add("@Fax", System.Data.SqlDbType.NVarChar);
        insertCommand.Parameters.Add("@sync_row_count", System.Data.SqlDbType.Int);
        insertCommand.Parameters["@sync_row_count"].Direction = 
            System.Data.ParameterDirection.Output;
    
        this.InsertCommand = insertCommand;
    
    
        // Redefine the update command so that it does not update values 
        // in the CreationDate and LastEditDate columns.
        System.Data.SqlClient.SqlCommand updateCommand = new System.Data.SqlClient.SqlCommand();
    
        updateCommand.CommandText = "UPDATE dbo.Customers SET [CompanyName] = @CompanyName, [ContactName] " +
            "= @ContactName, [ContactTitle] = @ContactTitle, [Address] = @Address, [City] " +
            "= @City, [Region] = @Region, [PostalCode] = @PostalCode, [Country] = @Country, " +
            "[Phone] = @Phone, [Fax] = @Fax " +
            "WHERE ([CustomerID] = @CustomerID) AND (@sync_force_write = 1 " +
            "OR ([LastEditDate] <= @sync_last_received_anchor)) SET @sync_row_count = @@rowcount";
        updateCommand.CommandType = System.Data.CommandType.Text;
        updateCommand.Parameters.Add("@CompanyName", System.Data.SqlDbType.NVarChar);
        updateCommand.Parameters.Add("@ContactName", System.Data.SqlDbType.NVarChar);
        updateCommand.Parameters.Add("@ContactTitle", System.Data.SqlDbType.NVarChar);
        updateCommand.Parameters.Add("@Address", System.Data.SqlDbType.NVarChar);
        updateCommand.Parameters.Add("@City", System.Data.SqlDbType.NVarChar);
        updateCommand.Parameters.Add("@Region", System.Data.SqlDbType.NVarChar);
        updateCommand.Parameters.Add("@PostalCode", System.Data.SqlDbType.NVarChar);
        updateCommand.Parameters.Add("@Country", System.Data.SqlDbType.NVarChar);
        updateCommand.Parameters.Add("@Phone", System.Data.SqlDbType.NVarChar);
        updateCommand.Parameters.Add("@Fax", System.Data.SqlDbType.NVarChar);
        updateCommand.Parameters.Add("@CustomerID", System.Data.SqlDbType.NChar);
        updateCommand.Parameters.Add("@sync_force_write", System.Data.SqlDbType.Bit);
        updateCommand.Parameters.Add("@sync_last_received_anchor", System.Data.SqlDbType.DateTime);
        updateCommand.Parameters.Add("@sync_row_count", System.Data.SqlDbType.Int);
        updateCommand.Parameters["@sync_row_count"].Direction = 
            System.Data.ParameterDirection.Output;
    
        this.UpdateCommand = updateCommand;
    
        }
    }
    
    Partial Public Class CustomersSyncAdapter
        Private Sub OnInitialized()
    
            ' Redefine the insert command so that it does not insert values 
            ' into the CreationDate and LastEditDate columns.
            Dim insertCommand As New System.Data.SqlClient.SqlCommand
            With insertCommand
                .CommandText = "INSERT INTO dbo.Customers ([CustomerID], [CompanyName], " & _
                    "[ContactName], [ContactTitle], [Address], [City], [Region], [PostalCode], " & _
                    "[Country], [Phone], [Fax] )" & _
                    "VALUES (@CustomerID, @CompanyName, @ContactName, @ContactTitle, @Address, @City, " & _
                    "@Region, @PostalCode, @Country, @Phone, @Fax) SET @sync_row_count = @@rowcount"
                .CommandType = System.Data.CommandType.Text
                .Parameters.Add("@CustomerID", System.Data.SqlDbType.NChar)
                .Parameters.Add("@CompanyName", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@ContactName", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@ContactTitle", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@Address", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@City", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@Region", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@PostalCode", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@Country", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@Phone", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@Fax", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@sync_row_count", System.Data.SqlDbType.Int)
                .Parameters("@sync_row_count").Direction = ParameterDirection.Output
            End With
    
            Me.InsertCommand = insertCommand
    
    
            ' Redefine the update command so that it does not update values 
            ' in the CreationDate and LastEditDate columns.
            Dim updateCommand As New System.Data.SqlClient.SqlCommand
            With updateCommand
                .CommandText = "UPDATE dbo.Customers SET [CompanyName] = @CompanyName, [ContactName] " & _
                    "= @ContactName, [ContactTitle] = @ContactTitle, [Address] = @Address, [City] " & _
                    "= @City, [Region] = @Region, [PostalCode] = @PostalCode, [Country] = @Country, " & _
                    "[Phone] = @Phone, [Fax] = @Fax " & _
                    "WHERE ([CustomerID] = @CustomerID) AND (@sync_force_write = 1 " & _
                    "OR ([LastEditDate] <= @sync_last_received_anchor)) SET @sync_row_count = @@rowcount"
                .CommandType = System.Data.CommandType.Text
                .Parameters.Add("@CompanyName", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@ContactName", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@ContactTitle", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@Address", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@City", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@Region", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@PostalCode", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@Country", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@Phone", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@Fax", System.Data.SqlDbType.NVarChar)
                .Parameters.Add("@CustomerID", System.Data.SqlDbType.NChar)
                .Parameters.Add("@sync_force_write", System.Data.SqlDbType.Bit)
                .Parameters.Add("@sync_last_received_anchor", System.Data.SqlDbType.DateTime)
                .Parameters.Add("@sync_row_count", System.Data.SqlDbType.Int)
                .Parameters("@sync_row_count").Direction = ParameterDirection.Output
            End With
    
            Me.UpdateCommand = updateCommand
    
        End Sub
    
    End Class
    

Testando o aplicativo

Para sincronizar e exibir uma coluna de acompanhamento atualização

  1. Pressione F5.

  2. No formulário, atualizar um registro, alterando um valor na coluna LastEditDate e clicar no Salvar botão.

  3. Volte para o formulário e clique em Synchronize Now.

  4. Verifique se a atualização no banco de dados de grade e o servidor de aplicativo.Observe que o valor da coluna do servidor substituiu a atualização no cliente.O processo de atualização é o seguinte:

    1. Synchronization Services determina que uma linha foi alterado no cliente.

    2. Durante a sincronização, a linha é carregada e aplicada à tabela no banco de dados do servidor.No entanto, as colunas de acompanhamento não são incluídas na demonstrativo de atualização.Synchronization Servicesefetivamente executa uma "atualização fictícia" à tabela.

    3. A linha agora é ecoada volta para o cliente, mas os comandos que selecionar alterações a partir do servidor incluem as colunas de acompanhamento.Portanto, a alterar foi feita no cliente é substituída pelo valor do servidor.

Próximas etapas

Nesta explicação passo a passo, você configurou sincronização bidirecional com conflito básico de manipulação e resolveu o problema potencial de colunas no banco de dados do cliente de acompanhamento de servidor.Usando classes parcial, você pode estender o Cache do banco de dados local código de outras maneiras significativas.Por exemplo, você pode redefinir os comandos SQL que seleciona alterações do banco de dados do servidor para que dados foram filtrados quando baixada para o cliente.Recomendamos que você leia os tópicos "como" Esta documentação para compreender as maneiras em que você pode adicionar ou alterar o código de sincronização para atender às necessidades de seus aplicativos.Para obter mais informações, consulte Como programa Common cliente e tarefas de sincronização do servidor.

Consulte também

Conceitos

Visão geral sobre aplicativos ocasionalmente conectados

Outros recursos

Como programa Common cliente e tarefas de sincronização do servidor

Ferramentas para ajudar a desenvolver aplicativos (serviços de sincronização)

Date

History

Motivo

Julho de 2008

Tópico adicional.

Alteração de recurso do SP1.