Пошаговое руководство. Провизионирование клиентской базы данных с помощью фильтрованной области
В этом пошаговом руководстве будет создано приложение командной строки, используемое для провизионирования компактной базы данных SQL Express SyncExpressDB с помощью артефактов, связанных с областью синхронизации OrdersScope-NC. В сущности, в процессе провизионирования выполняется провизионирование клиентской базы данных для синхронизации данных, связанных с областью OrdersScope-NC, с серверной базой данных. Подробные сведения о провизионировании клиентов см. в Provisioning the Clients, а подробные сведения об отфильтрованных областях см. в Как фильтровать данные для синхронизации базы данных (SQL Server).
Провизионирование базы данных SQL Express
В следующем списке перечислены шаги создания приложения командной строки, использующего Visual Studio для провизионирования базы данных SQL Express SyncExpressDB с использованием артефактов, связанных с областью синхронизации OrdersScope-NC.
В обозревателе решений щелкните правой кнопкой мыши Решение «SyncSQLServerAndSQLExpress», укажите Добавить и выберите Создать проект.
Выберите Visual C# в Типы проектов и выберите Приложение командной строки в Шаблоны.
Укажите ProvisionFilteredScopeClient в качестве имени проекта.
Нажмите кнопку ОК, чтобы закрыть диалоговое окно Создать проект.
В обозревателе решений щелкните правой кнопкой мыши ProvisionFilteredScopeClient и выберите Добавить ссылку.
Выберите Microsoft.Synchronization, Microsoft.Synchornization.Data, Microsoft.Synchronization.Data.SqlServer и нажмите кнопку ОК, чтобы закрыть диалоговое окно Добавить ссылку.
Добавьте следующие инструкции using в начало файла Program.cs после имеющихся инструкций using.
using System.Data; using System.Data.SqlClient; using Microsoft.Synchronization; using Microsoft.Synchronization.Data; using Microsoft.Synchronization.Data.SqlServer;
Добавьте следующую инструкцию к методу Main, чтобы создать соединение SQL с базой данных Express.
SqlConnection clientConn = new SqlConnection(@"Data Source=.\SQLEXPRESS; Initial Catalog=SyncExpressDB; Trusted_Connection=Yes");
Добавьте следующую инструкцию к методу Main, чтобы создать соединение SQL с серверной базой данных.
SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");
Важно! Если не используется экземпляр по умолчанию, в указанной выше инструкции замените имя сервера именем экземпляра используемого сервера. Например, если используемый экземпляр SQL Server имеет имя MYSQLINSTANCE, замените (local) на .\MYSQLINSTANCE.
Добавьте следующую инструкцию к методу Main, чтобы получить описание области OrdersScope-NC из SQL Server. Эта инструкция вызывает метод GetDescriptionForScope(String, SqlCeConnection) класса SqlSyncDescriptionBuilder для получения описания OrdersScope-NC с сервера.
Класс DbSyncScopeDescription используется для указания имени области синхронизации и списка таблиц для синхронизации. Эти сведения могут быть указаны явным образом или получены путем запроса базы данных с помощью метода GetDescriptionForScope(String, String, SqlConnection). В данном пошаговом руководстве будет использоваться метод GetDescriptionForScope(String, String, SqlConnection) класса SqlSyncDescriptionBuilder для получения описания области с сервера.
// get description for the OrdersScope-NC scope from the SyncDB server database DbSyncScopeDescription scopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope("OrdersScope-NC", serverConn);
Добавьте следующие инструкции для провизионирования компактной базы данных SyncExpressDB с использованием артефактов, связанных с синхронизацией. В этом коде создается объект SqlCeSyncScopeProvisioning, задается флаг для создания таблицы Orders в клиентской базе данных и выполняется процесс провизионирования для добавления к клиенту артефактов, связанных с областью. Общие этапы провизионирования базы данных SQL Express с использованием артефактов, связанных с областью синхронизации, таковы:
Создайте экземпляр класса SqlCeSyncScopeProvisioning на основе DbSyncScopeDescription, полученного в предыдущем шаге, и соединения с базой данных SQL Express. Класс SqlCeSyncScopeProvisioning представляет провизионирование базы данных SQL Express для определенной области, представленной объектом DbSyncScopeDescription.
Вызовите метод Apply()()()() на объекте SqlCeSyncScopeProvisioning, чтобы начать процесс провизионирования, в ходе которого будет создана инфраструктура отслеживания изменений в базе данных SyncExpressDB.
Примечание
Явно вызывать метод SetCreateTableDefault(DbSyncCreationOption) со значением DbSyncCreationOption как CreateOrUseExisting не нужно, поскольку CreateOrUseExisting является значением по умолчанию, используемым Sync Framework. В процессе провизионирования таблица Products автоматически создается в компактной базе данных. Метод SetCreateTableDefault(DbSyncCreationOption) используется для указания на то, следует ли создавать базовые таблицы при настройке областей.
// create a provisioning object SqlSyncScopeProvisioning clientProvision = new SqlSyncScopeProvisioning(clientConn, scopeDesc); // start the provisioning process clientProvision.Apply();
В обозревателе решений щелкните правой кнопкой мыши ProvisionFilteredScopeClient и выберите команду Построить.
В обозревателе решений щелкните правой кнопкой мыши ProvisionFilteredScopeClient и выберите команду Назначить запускаемым проектом.
Нажмите клавиши Ctrl+F5, чтобы выполнить программу.
Нажмите ВВОД, чтобы закрыть окно командной строки.
В среде SQL Server Management Studio щелкните правой кнопкой мыши .\SQLEXPRESS и выберите Обновить.
Разверните узел .\SQLEXPRESS, разверните Базы данных, разверните SyncExpressDB, разверните Таблицы, после чего должны отобразиться таблицы, созданные в процессе провизионирования. Также в процессе провизионирования создаются и другие объекты, такие как триггеры и хранимые процедуры.
Не закрывайте Visual Studio и среду SQL Server Management Studio.
Полный пример кода
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();
}
}
}
См. также
Другие ресурсы
Как фильтровать данные для синхронизации базы данных (SQL Server)