Класс SqlCeClientSyncProvider

Абстрагирует службу синхронизации клиента для SQL Server Compact, который взаимодействует с клиентом и отделяет агент синхронизации от подробностей реализации клиентской базы данных.

Пространство имен: Microsoft.Synchronization.Data.SqlServerCe
Сборка: Microsoft.Synchronization.Data.SqlServerCe (в microsoft.synchronization.data.sqlserverce.dll)

Синтаксис

'Декларация
<SuppressMessageAttribute("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling")> _
<SuppressMessageAttribute("Microsoft.Naming", "CA1706:ShortAcronymsShouldBeUppercase")> _
Public Class SqlCeClientSyncProvider
    Inherits ClientSyncProvider
'Применение
Dim instance As SqlCeClientSyncProvider
[SuppressMessageAttribute("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling")] 
[SuppressMessageAttribute("Microsoft.Naming", "CA1706:ShortAcronymsShouldBeUppercase")] 
public class SqlCeClientSyncProvider : ClientSyncProvider
[SuppressMessageAttribute(L"Microsoft.Maintainability", L"CA1506:AvoidExcessiveClassCoupling")] 
[SuppressMessageAttribute(L"Microsoft.Naming", L"CA1706:ShortAcronymsShouldBeUppercase")] 
public ref class SqlCeClientSyncProvider : public ClientSyncProvider
/** @attribute SuppressMessageAttribute("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling") */ 
/** @attribute SuppressMessageAttribute("Microsoft.Naming", "CA1706:ShortAcronymsShouldBeUppercase") */ 
public class SqlCeClientSyncProvider extends ClientSyncProvider
SuppressMessageAttribute("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling") 
SuppressMessageAttribute("Microsoft.Naming", "CA1706:ShortAcronymsShouldBeUppercase") 
public class SqlCeClientSyncProvider extends ClientSyncProvider

Замечания

Служба синхронизации клиента выполняет следующие основные функции.

  • Сохраняет сведения о подготовленных к синхронизации таблицах на клиенте.

  • Получает изменения, которые произошли в клиентской базе данных со времени последней синхронизации.

  • Применяет добавочные изменения к клиентской базе данных.

  • Выявляет конфликтующие изменения.

Пример

В следующем примере кода создается класс, производный от класса SqlCeClientSyncProvider. Класс создает соединение с клиентской базой данных и обрабатывает некоторые основные события, в том числе создание схемы в базе данных клиента. Чтобы просмотреть этот код в контексте полного примера, см. раздел Как работать с событиями и бизнес-логикой программы.

public class SampleClientSyncProvider : SqlCeClientSyncProvider
{

    public SampleClientSyncProvider()
    {
        //Specify a connection string for the sample client database.
        Utility util = new Utility();
        this.ConnectionString = Utility.ConnStr_SqlCeClientSync;

        //Log information for the following events.
        this.SchemaCreated += new EventHandler<SchemaCreatedEventArgs>(EventLogger.LogEvents);
        this.ChangesSelected += new EventHandler<ChangesSelectedEventArgs>(EventLogger.LogEvents);
        this.ChangesApplied += new EventHandler<ChangesAppliedEventArgs>(EventLogger.LogEvents);
        this.ApplyChangeFailed += new EventHandler<ApplyChangeFailedEventArgs>(EventLogger.LogEvents);
        
        //Use the following events to fix up schema on the client.
        //We use the CreatingSchema event to change the schema
        //by using the API. We use the SchemaCreated event 
        //to change the schema by using SQL.
        //Note that both schema events fire for the Customer table,
        //even though we already created the table. This allows us
        //to work with the table at this point if we have to.
        this.CreatingSchema += new EventHandler<CreatingSchemaEventArgs>(SampleClientSyncProvider_CreatingSchema);
        this.SchemaCreated += new EventHandler<SchemaCreatedEventArgs>(SampleClientSyncProvider_SchemaCreated);

     }

    private void SampleClientSyncProvider_CreatingSchema(object sender, CreatingSchemaEventArgs e)
    {

        string tableName = e.Table.TableName;

        if (tableName == "Customer")
        {
            //Set the RowGuid property because it is not copied
            //to the client by default. This is also a good time
            //to specify literal defaults with .Columns[ColName].DefaultValue,
            //but we will specify defaults like NEWID() by calling
            //ALTER TABLE after the table is created.
            e.Schema.Tables["Customer"].Columns["CustomerId"].RowGuid = true;
        }

        if (tableName == "OrderHeader")
        {
            e.Schema.Tables["OrderHeader"].Columns["OrderId"].RowGuid = true;
        }
    }

    private void SampleClientSyncProvider_SchemaCreated(object sender, SchemaCreatedEventArgs e)
    {
        string tableName = e.Table.TableName;
        Utility util = new Utility();

        //Call ALTER TABLE on the client. This must be done
        //over the same connection and within the same
        //transaction that Sync Framework uses
        //to create the schema on the client.
        if (tableName == "Customer")
        {
            Utility.MakeSchemaChangesOnClient(e.Connection, e.Transaction, "Customer");                
        }
       
        if (tableName == "OrderHeader")
        {
            Utility.MakeSchemaChangesOnClient(e.Connection, e.Transaction, "OrderHeader");                
        }

        if (tableName == "OrderDetail")
        {
            Utility.MakeSchemaChangesOnClient(e.Connection, e.Transaction, "OrderDetail");                
        }
    }
}
Public Class SampleClientSyncProvider
    Inherits SqlCeClientSyncProvider


    Public Sub New()
        'Specify a connection string for the sample client database.
        Dim util As New Utility()
        Me.ConnectionString = Utility.ConnStr_SqlCeClientSync

        'Log information for the following events.
        AddHandler Me.SchemaCreated, AddressOf EventLogger.LogEvents
        AddHandler Me.ChangesSelected, AddressOf EventLogger.LogEvents
        AddHandler Me.ChangesApplied, AddressOf EventLogger.LogEvents
        AddHandler Me.ApplyChangeFailed, AddressOf EventLogger.LogEvents

        'Use the following events to fix up schema on the client.
        'We use the CreatingSchema event to change the schema
        'by using the API. We use the SchemaCreated event 
        'to change the schema by using SQL.
        'Note that both schema events fire for the Customer table,
        'even though we already created the table. This allows us
        'to work with the table at this point if we have to.
        AddHandler Me.CreatingSchema, AddressOf SampleClientSyncProvider_CreatingSchema
        AddHandler Me.SchemaCreated, AddressOf SampleClientSyncProvider_SchemaCreated

    End Sub 'New


    Private Sub SampleClientSyncProvider_CreatingSchema(ByVal sender As Object, ByVal e As CreatingSchemaEventArgs)

        Dim tableName As String = e.Table.TableName

        If tableName = "Customer" Then
            'Set the RowGuid property because it is not copied
            'to the client by default. This is also a good time
            'to specify literal defaults with .Columns[ColName].DefaultValue,
            'but we will specify defaults like NEWID() by calling
            'ALTER TABLE after the table is created.
            e.Schema.Tables("Customer").Columns("CustomerId").RowGuid = True
        End If

        If tableName = "OrderHeader" Then
            e.Schema.Tables("OrderHeader").Columns("OrderId").RowGuid = True
        End If

    End Sub 'SampleClientSyncProvider_CreatingSchema


    Private Sub SampleClientSyncProvider_SchemaCreated(ByVal sender As Object, ByVal e As SchemaCreatedEventArgs)
        Dim tableName As String = e.Table.TableName
        Dim util As New Utility()

        'Call ALTER TABLE on the client. This must be done
        'over the same connection and within the same
        'transaction that Sync Framework uses
        'to create the schema on the client.
        If tableName = "Customer" Then
            Utility.MakeSchemaChangesOnClient(e.Connection, e.Transaction, "Customer")
        End If

        If tableName = "OrderHeader" Then
            Utility.MakeSchemaChangesOnClient(e.Connection, e.Transaction, "OrderHeader")
        End If

        If tableName = "OrderDetail" Then
            Utility.MakeSchemaChangesOnClient(e.Connection, e.Transaction, "OrderDetail")
        End If

    End Sub 'SampleClientSyncProvider_SchemaCreated
End Class 'SampleClientSyncProvider

Иерархия наследования

System.Object
   Microsoft.Synchronization.SyncProvider
     Microsoft.Synchronization.Data.ClientSyncProvider
      Microsoft.Synchronization.Data.SqlServerCe.SqlCeClientSyncProvider

Многопоточное использование

Все общие статические члены (Shared в Visual Basic) можно использовать в многопоточных операциях. Безопасная многопоточная работа с членами экземпляров типа не гарантируется.

См. также

Справочник

Элементы SqlCeClientSyncProvider
Пространство имен Microsoft.Synchronization.Data.SqlServerCe