Export (0) Print
Expand All

SqlCeClientSyncProvider Class

Abstracts a client synchronization provider for SQL Server Compact that communicates with the client and shields the synchronization agent from the specific implementation of the client database.

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

Namespace:  Microsoft.Synchronization.Data.SqlServerCe
Assembly:  Microsoft.Synchronization.Data.SqlServerCe (in Microsoft.Synchronization.Data.SqlServerCe.dll)

public class SqlCeClientSyncProvider : ClientSyncProvider

The SqlCeClientSyncProvider type exposes the following members.

  NameDescription
Public methodSqlCeClientSyncProvider()Initializes a new instance of the SqlCeClientSyncProvider class by using default values.
Public methodSqlCeClientSyncProvider(String)Initializes a new instance of the SqlCeClientSyncProvider class by using a connection string parameter.
Public methodSqlCeClientSyncProvider(String, Boolean)Initializes a new instance of the SqlCeClientSyncProvider class by using connection string and database creation parameters.
Top

  NameDescription
Public propertyClientIdGets or sets the GUID that Sync Framework uses to identify the client database. (Overrides ClientSyncProvider.ClientId.)
Public propertyConflictResolverGets a SyncConflictResolver object for the client synchronization provider, which determines what action to take when a conflict occurs.
Public propertyConnectionGets the IDbConnection object that is used to connect to the client database.
Public propertyConnectionStringGets or sets the string that is used to connect to the client database.
Public propertyCreateDatabaseIfNotExistsGets or sets whether to create the client database if it does not exist.
Public propertyRetentionInDaysGets or sets the number of days that change-tracking metadata is stored in a SQL Server Compact database.
Top

  NameDescription
Public methodAcceptChanges(IEnumerable<String>)Updates tracking metadata for the specified tables so that pending changes for the specified tables are not uploaded during the next synchronization.
Public methodAcceptChanges(String)Updates tracking metadata so that pending changes for the specified table are not uploaded during the next synchronization.
Public methodAcceptChanges(IEnumerable<String>, SyncAnchor)Updates tracking metadata up to the specified anchor point so that pending changes for the specified tables at the client are not uploaded during the next synchronization.
Public methodAcceptChanges(String, SyncAnchor)Updates tracking metadata up to the specified anchor point so that pending changes for the specified table at the client are not uploaded during the next synchronization.
Public methodApplyChanges(IEnumerable<String>, DataSet, SyncAnchor)Applies inserts, updates, and deletes for a synchronization group to the client database when given table names, a data set, and server anchor parameters.
Public methodApplyChanges(String, DataSet, SyncAnchor)Applies inserts, updates, and deletes for a synchronization group to the client database when given a table name, a data set, and server anchor parameters.
Public methodApplyChanges(SyncGroupMetadata, DataSet, SyncSession)Applies inserts, updates, and deletes for a synchronization group to the client database when given group metadata, a data set, and synchronization session parameters. (Overrides ClientSyncProvider.ApplyChanges(SyncGroupMetadata, DataSet, SyncSession).)
Public methodBeginTransactionCalled by the SyncAgent to begin a transaction. This allows the agent to commit a set of changes as an atomic unit. (Overrides ClientSyncProvider.BeginTransaction(SyncSession).)
Public methodCreateSchemaCreates the table schema in the client database if the schema does not exist. (Overrides ClientSyncProvider.CreateSchema(SyncTable, SyncSchema).)
Public methodDispose()Releases all resources that are used by the SqlCeClientSyncProvider. (Overrides ClientSyncProvider.Dispose().)
Protected methodDispose(Boolean)Releases the unmanaged resources that are used by the SqlCeClientSyncProvider and optionally releases the managed resources.
Public methodEndTransactionCalled by the SyncAgent to end a transaction. This allows the agent to commit a set of changes as an atomic unit. (Overrides ClientSyncProvider.EndTransaction(Boolean, SyncSession).)
Public methodEquals (Inherited from Object.)
Protected methodFinalizeIs the destructor for SqlCeClientSyncProvider. (Overrides Object.Finalize().)
Public methodGetChanges(IEnumerable<String>)Gets inserts, updates, and deletes from the specified tables at the client that occurred since the last time Synchronize or AcceptChanges was called.
Public methodGetChanges(String)Gets inserts, updates, and deletes from the specified table at the client that occurred since the last time Synchronize or AcceptChanges was called.
Public methodGetChanges(SyncGroupMetadata, SyncSession)Gets inserts, updates, and deletes for the specified synchronization group and session that occurred at the client since the last time Synchronize or AcceptChanges was called. (Overrides ClientSyncProvider.GetChanges(SyncGroupMetadata, SyncSession).)
Public methodGetHashCode (Inherited from Object.)
Public methodGetTableReceivedAnchorGets a SyncAnchor object that contains the time when the last change was received from the server. (Overrides ClientSyncProvider.GetTableReceivedAnchor(String).)
Public methodGetTableSentAnchorGets a SyncAnchor object that contains the time when the last change was sent from the client. (Overrides ClientSyncProvider.GetTableSentAnchor(String).)
Public methodGetType (Inherited from Object.)
Protected methodMemberwiseClone (Inherited from Object.)
Protected methodOnApplyChangeFailedRaises the ApplyChangeFailed event.
Protected methodOnApplyingChangesRaises the ApplyingChanges event.
Protected methodOnChangesAppliedRaises the ChangesApplied event.
Protected methodOnChangesSelectedRaises the ChangesSelected event.
Protected methodOnCreatingSchemaRaises the CreatingSchema event.
Public methodOnInitializedRaises the initialized event.
Protected methodOnSchemaCreatedRaises the SchemaCreated event.
Protected methodOnSelectingChangesRaises the SelectingChanges event.
Protected methodOnSyncProgressRaises the SyncProgress event.
Public methodSetTableReceivedAnchorSets a SyncAnchor object that contains the time that the last change was received from the server. (Overrides ClientSyncProvider.SetTableReceivedAnchor(String, SyncAnchor).)
Public methodSetTableSentAnchorSets a SyncAnchor object that contains the time when the last change was sent from the client. (Overrides ClientSyncProvider.SetTableSentAnchor(String, SyncAnchor).)
Public methodToString (Inherited from Object.)
Top

  NameDescription
Public eventApplyChangeFailedOccurs after a row could not be applied at the client.
Public eventApplyingChangesOccurs before changes are applied at the client for a synchronization group.
Public eventChangesAppliedOccurs after all changes are applied at the client for a synchronization group.
Public eventChangesSelectedOccurs after all changes to be applied to the server for a synchronization group are selected from the client.
Public eventCreatingSchemaOccurs before the schema is created at the client for each table.
Public eventSchemaCreatedOccurs after the schema is created at the client for each table.
Public eventSelectingChangesOccurs before all changes to be applied to the server for a synchronization group are selected from the client.
Public eventSyncProgressOccurs during the selection and application of changes for a synchronization group at the client.
Top

The principal activities of the client synchronization provider are as follows:

  • Stores information about tables on the client that are enabled for synchronization.

  • Retrieves changes that occurred in the client database since the last synchronization.

  • Applies incremental changes to the client database.

  • Detects conflicting changes.

The following code example creates a class that derives from SqlCeClientSyncProvider. The class creates a connection to the client database and handles several common events, including schema creation in the client database. To view this code in the context of a complete example, see How to: Work with Events and Program Business Logic.

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


Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Show:
© 2014 Microsoft