Поделиться через


Пошаговое руководство. Провизионирование клиентской базы данных с помощью фильтрованной области

В этом пошаговом руководстве будет создано приложение командной строки, используемое для провизионирования компактной базы данных SQL Express SyncExpressDB с помощью артефактов, связанных с областью синхронизации OrdersScope-NC. В сущности, в процессе провизионирования выполняется провизионирование клиентской базы данных для синхронизации данных, связанных с областью OrdersScope-NC, с серверной базой данных. Подробные сведения о провизионировании клиентов см. в Provisioning the Clients, а подробные сведения об отфильтрованных областях см. в Как фильтровать данные для синхронизации базы данных (SQL Server).

Провизионирование базы данных SQL Express

В следующем списке перечислены шаги создания приложения командной строки, использующего Visual Studio для провизионирования базы данных SQL Express SyncExpressDB с использованием артефактов, связанных с областью синхронизации OrdersScope-NC.

  1. В обозревателе решений щелкните правой кнопкой мыши Решение «SyncSQLServerAndSQLExpress», укажите Добавить и выберите Создать проект.

  2. Выберите Visual C# в Типы проектов и выберите Приложение командной строки в Шаблоны.

  3. Укажите ProvisionFilteredScopeClient в качестве имени проекта.

  4. Нажмите кнопку ОК, чтобы закрыть диалоговое окно Создать проект.

  5. В обозревателе решений щелкните правой кнопкой мыши ProvisionFilteredScopeClient и выберите Добавить ссылку.

  6. Выберите Microsoft.Synchronization, Microsoft.Synchornization.Data, Microsoft.Synchronization.Data.SqlServer и нажмите кнопку ОК, чтобы закрыть диалоговое окно Добавить ссылку.

  7. Добавьте следующие инструкции using в начало файла Program.cs после имеющихся инструкций using.

    using System.Data;
    using System.Data.SqlClient;
    
    using Microsoft.Synchronization;
    using Microsoft.Synchronization.Data;
    using Microsoft.Synchronization.Data.SqlServer;
    
  8. Добавьте следующую инструкцию к методу Main, чтобы создать соединение SQL с базой данных Express.

    SqlConnection clientConn = new SqlConnection(@"Data Source=.\SQLEXPRESS; Initial Catalog=SyncExpressDB; Trusted_Connection=Yes");
    
  9. Добавьте следующую инструкцию к методу Main, чтобы создать соединение SQL с серверной базой данных.

    SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");
    
    Важное примечаниеВажно!

    Если не используется экземпляр по умолчанию, в указанной выше инструкции замените имя сервера именем экземпляра используемого сервера. Например, если используемый экземпляр SQL Server имеет имя MYSQLINSTANCE, замените (local) на .\MYSQLINSTANCE.

  10. Добавьте следующую инструкцию к методу 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);
    
  11. Добавьте следующие инструкции для провизионирования компактной базы данных SyncExpressDB с использованием артефактов, связанных с синхронизацией. В этом коде создается объект SqlCeSyncScopeProvisioning, задается флаг для создания таблицы Orders в клиентской базе данных и выполняется процесс провизионирования для добавления к клиенту артефактов, связанных с областью. Общие этапы провизионирования базы данных SQL Express с использованием артефактов, связанных с областью синхронизации, таковы:

    1. Создайте экземпляр класса SqlCeSyncScopeProvisioning на основе DbSyncScopeDescription, полученного в предыдущем шаге, и соединения с базой данных SQL Express. Класс SqlCeSyncScopeProvisioning представляет провизионирование базы данных SQL Express для определенной области, представленной объектом DbSyncScopeDescription.

    2. Вызовите метод 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();
    
  12. В обозревателе решений щелкните правой кнопкой мыши ProvisionFilteredScopeClient и выберите команду Построить.

  13. В обозревателе решений щелкните правой кнопкой мыши ProvisionFilteredScopeClient и выберите команду Назначить запускаемым проектом.

  14. Нажмите клавиши Ctrl+F5, чтобы выполнить программу.

  15. Нажмите ВВОД, чтобы закрыть окно командной строки.

  16. В среде SQL Server Management Studio щелкните правой кнопкой мыши .\SQLEXPRESS и выберите Обновить.

  17. Разверните узел .\SQLEXPRESS, разверните Базы данных, разверните SyncExpressDB, разверните Таблицы, после чего должны отобразиться таблицы, созданные в процессе провизионирования. Также в процессе провизионирования создаются и другие объекты, такие как триггеры и хранимые процедуры.

  18. Не закрывайте 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)