Passo a passo: provisionando um banco de dados cliente com um escopo filtrado
Neste passo a passo, você criará um aplicativo de console, que provisiona o banco de dados SQL Express SyncExpressDB com artefatos relacionados ao escopo de sincronização OrdersScope-NC. Basicamente, o processo de provisionamento prepara o banco de dados cliente para a sincronização de dados relacionados ao escopo OrdersScope-NC com o banco de dados servidor. Para obter mais detalhes sobre o provisionamento de clientes, consulte Provisioning the Clients. Para obter detalhes sobre escopos filtrados, consulte Como filtrar dados para sincronização de bancos de dados (SQL Server).
Para provisionar o banco de dados SQL Express
A lista a seguir contém as etapas para criar um aplicativo de console usando o Visual Studio para provisionar o banco de dados SQL Express SyncExpressDB com artefatos relacionados ao escopo de sincronização OrdersScope-NC.
No Gerenciador de Soluções, clique com o botão direito do mouse em Solução ‘SyncSQLServerAndSQLExpress’, aponte para Adicionar e clique em Novo Projeto.
Selecione Visual C# em Tipos de Projeto e selecione Aplicativo do Console em Modelos.
Digite ProvisionFilteredScopeClient para nome do projeto.
Clique em OK para fechar a caixa de diálogo Novo Projeto.
Na janela Gerenciador de Soluções, clique com o botão direito do mouse em ProvisionFilteredScopeClient e clique em Adicionar Referência.
Selecione Microsoft.Synchronization, Microsoft.Synchornization.Data, Microsoft.Synchronization.Data.SqlServer e clique em OK para fechar a caixa de diálogo Adicionar Referência.
Adicione as instruções using a seguir ao início do arquivo Program.cs após as instruções using existentes.
using System.Data; using System.Data.SqlClient; using Microsoft.Synchronization; using Microsoft.Synchronization.Data; using Microsoft.Synchronization.Data.SqlServer;
Adicione a instrução a seguir ao método Main para criar uma conexão SQL com o banco de dados expresso.
SqlConnection clientConn = new SqlConnection(@"Data Source=.\SQLEXPRESS; Initial Catalog=SyncExpressDB; Trusted_Connection=Yes");
Adicione a instrução a seguir ao método Main para criar uma conexão SQL com o banco de dados servidor.
SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");
Importante
Na instrução anterior, substitua o nome do servidor pelo nome da instância do seu servidor, caso não esteja usando a instância padrão. Por exemplo: se o nome de sua instância do SQL Server for MYSQLINSTANCE, substitua (local) por .\MYSQLINSTANCE.
Adicione a instrução a seguir ao método Main para obter a descrição do escopo OrdersScope-NC do SQL Server. Esta instrução invoca o método GetDescriptionForScope(String, SqlCeConnection) na classe SqlSyncDescriptionBuilder para recuperar a descrição do OrdersScope-NC do servidor.
A classe DbSyncScopeDescription é usada para especificar o nome do escopo de sincronização e a lista de tabelas a serem sincronizadas. Essas informações podem ser especificadas explicitamente ou podem ser obtidas através da consulta ao banco de dados usando o método GetDescriptionForScope(String, String, SqlConnection). Neste passo a passo, você usará o método GetDescriptionForScope(String, String, SqlConnection) da classe SqlSyncDescriptionBuilder para recuperar a descrição do escopo do servidor.
// get description for the OrdersScope-NC scope from the SyncDB server database DbSyncScopeDescription scopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope("OrdersScope-NC", serverConn);
Adicione as instruções a seguir para provisionar o banco de dados SyncExpressDB com artefatos relacionados à sincronização. Este código cria um objeto SqlCeSyncScopeProvisioning, define o sinalizador para criar a tabela Orders no banco de dados cliente e executa o processo de provisionamento para adicionar ao cliente artefatos relacionados a escopo. Etapas de alto nível para provisionar um banco de dados SQL Express com artefatos relacionados ao escopo de sincronização:
Crie uma instância da classe SqlCeSyncScopeProvisioning com base no DbSyncScopeDescription obtido na etapa anterior e uma conexão com o banco de dados SQL Express. A classe SqlCeSyncScopeProvisioning representa o provisionamento de um banco de dados SQL Express para um escopo específico que é representado por um objeto DbSyncScopeDescription.
Invoque o método Apply()()()() no objeto SqlCeSyncScopeProvisioning para iniciar o processo de provisionamento, que cria a infraestrutura de controle de alterações no banco de dados SyncExpressDB.
Dica
Não é necessário invocar explicitamente o método SetCreateTableDefault(DbSyncCreationOption) com o valor DbSyncCreationOption como CreateOrUseExisting porque o CreateOrUseExisting é o valor padrão usado pela estrutura de sincronização. A tabela Products é criada automaticamente no banco de dados compacto durante o processo de provisionamento. O método SetCreateTableDefault(DbSyncCreationOption) é usado para especificar se tabelas base devem ser criadas quando um escopo é configurado.
// create a provisioning object SqlSyncScopeProvisioning clientProvision = new SqlSyncScopeProvisioning(clientConn, scopeDesc); // start the provisioning process clientProvision.Apply();
No Gerenciador de Soluções, clique com o botão direito do mouse em ProvisionFilteredScopeClient e clique em Compilar.
No Gerenciador de Soluções, clique com o botão direito do mouse em ProvisionFilteredScopeClient novamente e clique em Definir como Projeto de Inicialização.
Pressione Ctrl+F5 para executar o programa.
Pressione ENTER para fechar a janela do prompt de comando.
No SQL Server Management Studio, clique com o botão direito do mouse em .\SQLEXPRESS e clique em Atualizar.
Expanda o nó .\SQLEXPRESS, expanda Bancos de Dados, expanda SyncExpressDB, expanda Tabelas. Deverão aparecer tabelas criadas pelo processo de provisionamento. Há outros objetos, como gatilhos e procedimentos armazenados, criados pelo processo de provisionamento.
Mantenha o Visual Studio e o SQL Server Management Studio abertos.
Exemplo de código completo
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Synchronization;
using Microsoft.Synchronization.Data;
using Microsoft.Synchronization.Data.SqlServer;
namespace ProvisionFilteredScopeClient
{
class Program
{
static void Main(string[] args)
{
// create connection to the SQL Express database
SqlConnection clientConn = new SqlConnection(@"Data Source=.\SQLEXPRESS; Initial Catalog=SyncExpressDB; Trusted_Connection=Yes");
// create connection to the server database
SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");
// get description for the OrdersScope-NC scope from the SyncDB server database
DbSyncScopeDescription scopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope("OrdersScope-NC", serverConn);
// create a provisioning object
SqlSyncScopeProvisioning clientProvision = new SqlSyncScopeProvisioning(clientConn, scopeDesc);
// create table if it does not already exist in the SyncExpressDB database
clientProvision.SetCreateTableDefault(DbSyncCreationOption.CreateOrUseExisting);
// start the provisioning process
clientProvision.Apply();
}
}
}
Consulte também
Outros recursos
Como filtrar dados para sincronização de bancos de dados (SQL Server)