Пошаговое руководство. Провизионирование клиента SQL Express
В этом пошаговом руководстве будет создана база данных SQL Express с именем SyncExpressDB, а также создано приложение командной строки, выполняющее провизионирование компактной базы данных с использованием артефактов, связанных с ProductsScope. При этом выполняется провизионирование клиентской базы данных для синхронизации с сервером. В предыдущем пошаговом руководстве Пошаговое руководство. Определение области и провизионирование серверной базы данных уже было выполнено провизионирование серверной базы данных с использованием артефактов, связанных с синхронизацией. . Подробные технические сведения о провизионировании см. в разделах Provisioning the Clients и Провизионирование для синхронизации (SQL Server).
Создание базы данных SQL Server Express
В следующем списке описываются этапы создания образца базы данных SQL Server Express.
В среде SQL Server Management Studio в меню Файл выберите Подключить к обозревателю объектов.
В диалоговом окне Соединение с сервером укажите компонент Database Engine как Тип сервера.
Выберите .\SQLEXPRESS как «Имя сервера».
Совет
Если база данных SQL Express на используемом компьютере имеет другое имя, укажите имя этой базы данных.
Укажите соответствующие учетные данные и нажмите кнопку Подключить для соединения с базой данных SQL Express.
Щелкните правой кнопкой мыши Базы данных в окне Обозреватель объектов и выберите Создание базы данных.
Укажите SyncExpressDB в качестве имени базы данных и нажмите кнопку ОК.
Провизионирование базы данных SQL Express
В следующем списке перечислены шаги создания приложения командной строки, использующего Visual Studio для провизионирования базы данных SyncExpressDB SQL Express с использованием артефактов, связанных с областью синхронизации ProductsScope.
В Visual Studio в обозревателе решений щелкните правой кнопкой мыши Решение «SyncSQLServerAndSQLExpress», выберите Добавить и выберите Создать проект.
Выберите Visual C# в Типы проектов и выберите Приложение командной строки в Шаблоны.
Укажите ProvisionClient в качестве имени проекта.
Нажмите кнопку ОК, чтобы закрыть диалоговое окно Создать проект.
В обозревателе решений щелкните правой кнопкой мыши ProvisionClient и выберите Добавить ссылку.
Выберите 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.
// create a connection to the SyncExpressDB database SqlConnection clientConn = new SqlConnection(@"Data Source=.\SQLEXPRESS; Initial Catalog=SyncExpressDB; Trusted_Connection=Yes");
Добавьте следующую инструкцию к методу Main, чтобы создать соединение SQL с серверной базой данных.
// create a connection to the SyncDB server database SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");
Важно!
Если не используется экземпляр по умолчанию, в указанной выше инструкции замените имя сервера именем экземпляра используемого сервера. Например, если используемый экземпляр SQL Server имеет имя MYSQLINSTANCE, замените (local) на .\MYSQLINSTANCE.
Добавьте следующую инструкцию к методу Main, чтобы получить описание области ProductsScope из SQL Server. Эта инструкция вызывает метод GetDescriptionForScope(String, SqlConnection) класса SqlSyncDescriptionBuilder для получения описания ProductsScope с сервера.
Класс DbSyncScopeDescription используется для указания имени области синхронизации и списка таблиц для синхронизации. Эти сведения могут быть указаны явным образом или получены путем запроса базы данных с помощью метода GetDescriptionForScope(String, String, SqlConnection). В данном пошаговом руководстве будет использоваться метод GetDescriptionForScope(String, String, SqlConnection) класса SqlSyncDescriptionBuilder для получения описания области с сервера.
// get the description of ProductsScope from the SyncDB server database DbSyncScopeDescription scopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope("ProductsScope", serverConn);
Добавьте следующие инструкции для провизионирования базы данных SQL Express с использованием артефактов, связанных с ProductsScope. Общие этапы провизионирования базы данных SQL Express с использованием артефактов, связанных с областью синхронизации, таковы:
Создайте экземпляр класса SqlSyncScopeProvisioning на основе DbSyncScopeDescription, полученного в предыдущем шаге, и соединение с базой данных SQL Express. Класс SqlSyncScopeProvisioning представляет провизионирование базы данных SQL Express для определенной области, представленной объектом DbSyncScopeDescription.
Вызовите метод Apply()()()() в SqlSyncScopeProvisioning, чтобы начать процесс провизионирования, в ходе которого создается инфраструктура отслеживания изменений в базе данных SQL Express.
Примечание
Явно вызывать метод SetCreateTableDefault(DbSyncCreationOption) со значением DbSyncCreationOption как CreateOrUseExisting не нужно, поскольку CreateOrUseExisting является значением по умолчанию, используемым Sync Framework. В процессе провизионирования таблица Products автоматически создается в компактной базе данных. Метод SetCreateTableDefault(DbSyncCreationOption) используется для указания на то, следует ли создавать базовые таблицы при настройке областей.
// create server provisioning object based on the ProductsScope SqlSyncScopeProvisioning clientProvision = new SqlSyncScopeProvisioning(clientConn, scopeDesc); // starts the provisioning process clientProvision.Apply();
В обозревателе решений щелкните правой кнопкой мыши ProvisionClient и выберите команду Построить.
В обозревателе решений щелкните правой кнопкой мыши ProvisionClient и выберите команду Назначить запускаемым проектом.
Внимание!
Если текущий проект не был назначен запускаемым, то при повторном нажатии клавиш Ctrl+F5 приложение ProvisionServer будет выполнено снова и будет получено сообщение об ошибке следующего вида: «область уже существует в серверной базе данных».
Нажмите клавиши Ctrl+F5, чтобы выполнить программу.
Нажмите ВВОД, чтобы закрыть окно командной строки.
В среде SQL Server Management Studio разверните .\SQLEXPRESS, разверните Базы данных, разверните SyncExpressDB, разверните Таблицы, после чего должны отобразиться следующие дополнительные таблицы, созданные в процессе провизионирования: Products_Tracking, schema_info, scope_config и scope_info. Также в процессе провизионирования создаются и другие объекты, такие как триггеры и хранимые процедуры.
Не закрывайте Visual Studio и среду SQL Server Management Studio.
Полный пример кода
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();
}
}
}