Passo a passo: provisionando um cliente SQL Express
Neste passo a passo, você criará um banco de dados SQL Express denominado SyncExpressDB e um aplicativo de console que provisiona o banco de dados com artefatos relacionados a ProductsScope. O processo de provisão prepara o banco de dados cliente para a sincronização com o servidor. No passo a passo anterior Passo a passo: definindo um escopo e provisionando um banco de dados servidor, você provisionou o banco de dados servidor com artefatos já relacionados à sincronização. . Para obter mais detalhes técnicos sobre o provisionamento, consulte Provisioning the Clients e Provisionamento para sincronização (SQL Server).
Criar um banco de dados expresso do SQL Server
A lista a seguir contém as etapas para criar um exemplo de banco de dados expresso do SQL Server.
No SQL Server Management Studio, clique no menu Arquivo e em Conectar Pesquisador de Objetos.
Na caixa de diálogo Conectar ao Servidor, selecione Mecanismo de Banco de Dados para Tipo de servidor.
Selecione .\SQLEXPRESS para o nome do Servidor.
Dica
Se o nome do banco de dados SQL Express no seu computador for diferente, especifique esse nome.
Especifique as credenciais apropriadas e clique em Conectar para se conectar ao banco de dados SQL Express.
Clique com o botão direito do mouse em Bancos de dados na janela Pesquisador de Objetos; clique em Novo Banco de Dados.
Digite SyncExpressDB para nome do Banco de dados e clique em OK.
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 ProductsScope.
No Visual Studio, 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 ProvisionClient 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 ProvisionClient 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.
// create a connection to the SyncExpressDB database 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.
// create a connection to the SyncDB server database 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 ProductsScope do SQL Server. Esta instrução invoca o método GetDescriptionForScope(String, SqlConnection) na classe SqlSyncDescriptionBuilder para recuperar a descrição do ProductsScope 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 the description of ProductsScope from the SyncDB server database DbSyncScopeDescription scopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope("ProductsScope", serverConn);
Adicione as instruções a seguir para provisionar o banco de dados SQL Express com artefatos relativos ao ProductsScope. 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 SqlSyncScopeProvisioning com base no DbSyncScopeDescription obtido na etapa anterior e uma conexão com o banco de dados SQL Express. A classe SqlSyncScopeProvisioning 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 SqlSyncScopeProvisioning para iniciar o processo de provisionamento, que cria a infraestrutura de controle de alterações no banco de dados SQL Express.
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 server provisioning object based on the ProductsScope SqlSyncScopeProvisioning clientProvision = new SqlSyncScopeProvisioning(clientConn, scopeDesc); // starts the provisioning process clientProvision.Apply();
No Gerenciador de Soluções, clique com o botão direito do mouse em ProvisionClient e clique em Compilar.
No Gerenciador de Soluções, clique com o botão direito do mouse em ProvisionClient novamente e clique em Definir como Projeto de Inicialização.
Aviso
Se você não definir o projeto atual como um projeto de inicialização e pressionar Ctrl+F5 novamente, o aplicativo ProvisionServer será reexecutado e você obterá uma mensagem de erro semelhante a: “o escopo que já existe no banco de dados servidor“.
Pressione Ctrl+F5 para executar o programa.
Pressione ENTER para fechar a janela do prompt de comando.
No SQL Server Management Studio, expanda .\SQLEXPRESS, Bancos de dados, SyncExpressDB e Tables. Deverão aparecer as seguintes tabelas adicionais criadas pelo processo de provisionamento: Products_Tracking, schema_info, scope_config e scope_info. 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.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Synchronization;
using Microsoft.Synchronization.Data;
using Microsoft.Synchronization.Data.SqlServer;
namespace ProvisionClient
{
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 a connection to the SyncDB server database
SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");
// get the description of ProductsScope from the SyncDB server database
DbSyncScopeDescription scopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope("ProductsScope", serverConn);
// create server provisioning object based on the ProductsScope
SqlSyncScopeProvisioning clientProvision = new SqlSyncScopeProvisioning(clientConn, scopeDesc);
// create Products table if the table does not already exist
clientProvision.SetCreateTableDefault(DbSyncCreationOption.CreateOrUseExisting);
// starts the provisioning process
clientProvision.Apply();
}
}
}