Click here to Skip to main content
15,884,298 members
Articles / Database Development / SQL Server

Take Data Offline Using Microsoft Synchronization Services for ADO.NET

Rate me:
Please Sign up or sign in to vote.
4.88/5 (64 votes)
11 Jan 2008CPOL17 min read 382.6K   6.6K   252  
Build occasionally connected applications using Microsoft Synchronization Services for ADO.NET
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Data;
using System.Data.SqlClient;

using Microsoft.Synchronization;
using Microsoft.Synchronization.Data;

namespace SyncApplication
{
    public partial class ProgressForm : Form
    {
        public ProgressForm()
        {
            InitializeComponent();
        }

        public void Report(SyncProgressEventArgs args)
        {
            string message = "Progress: ";
            
            switch(args.SyncStage)
            {
                case SyncStage.ApplyingInserts:
                    message += "Applying insert for table: " + args.TableMetadata.TableName;
                    message += "[" + args.TableProgress.Inserts.ToString() + "|" + args.TableProgress.Updates.ToString() + "|" + args.TableProgress.Deletes.ToString() + "]";
                    message += "(Applied:" + args.TableProgress.ChangesApplied.ToString() + "/Pending:" + args.TableProgress.ChangesPending.ToString() + 
                       "/Failed:" + args.TableProgress.ChangesFailed.ToString() + "/Total:" + args.TableProgress.TotalChanges.ToString() + ")";
                break;    

                case SyncStage.ApplyingUpdates:
                    message += "Applying update for table: " + args.TableMetadata.TableName;
                    message += "[" + args.TableProgress.Inserts.ToString() + "|" + args.TableProgress.Updates.ToString() + "|" + args.TableProgress.Deletes.ToString() + "]";
                    message += "(Applied:" + args.TableProgress.ChangesApplied.ToString() + "/Pending:" + args.TableProgress.ChangesPending.ToString() +
                        "/Failed:" + args.TableProgress.ChangesFailed.ToString() + "/Total:" + args.TableProgress.TotalChanges.ToString() + ")"; 
                break;

                case SyncStage.ApplyingDeletes:
                    message += "Applying delete for table: " + args.TableMetadata.TableName;
                    message += "[" + args.TableProgress.Inserts.ToString() + "|" + args.TableProgress.Updates.ToString() + "|" + args.TableProgress.Deletes.ToString() + "]";
                    message += "(Applied:" + args.TableProgress.ChangesApplied.ToString() + "/Pending:" + args.TableProgress.ChangesPending.ToString() +
                        "/Failed:" + args.TableProgress.ChangesFailed.ToString() + "/Total:" + args.TableProgress.TotalChanges.ToString() + ")";
                break;
                
                case SyncStage.GettingInserts:
                    message += "Enumerating inserts for table: " + args.TableMetadata.TableName;
                    message += "[" + args.TableProgress.Inserts.ToString() + "|" + args.TableProgress.Updates.ToString() + "|" + args.TableProgress.Deletes.ToString() + "]";                    
                break;
            
                case SyncStage.GettingUpdates:
                    message += "Enumerating updates for table: " + args.TableMetadata.TableName;
                    message += "[" + args.TableProgress.Inserts.ToString() + "|" + args.TableProgress.Updates.ToString() + "|" + args.TableProgress.Deletes.ToString() + "]";                    
                break;

                case SyncStage.GettingDeletes:
                    message += "Enumerating deletes for table: " + args.TableMetadata.TableName;
                    message += "[" + args.TableProgress.Inserts.ToString() + "|" + args.TableProgress.Updates.ToString() + "|" + args.TableProgress.Deletes.ToString() + "]";                    
                break;
            }
            
            listSyncProgress.Items.Add(message);
            Application.DoEvents();
        }

        public void EnableClose()
        {
            buttonClose.Enabled = true;
            Application.DoEvents();
        }

        private void buttonClose_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void ProgressForm_Shown(object sender, EventArgs e)
        {            
        }
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Chief Technology Officer Raveable.com
United States United States
Entrepreneur, developer and then some. I started Raveable Hotel Reviews in 2008 to help travelers find the best hotel for their vacation with no history of bed bug reports (hint: don't go new york without checking bed bugs in NYC hotels page), cases of personal property theft, or food poisoning incidents.

Prior to Raveable.com, I was a development lead at Microsoft Corporation. I led the team developing the next generation social networking for Windows Mobile. Before that I played leading role in the design and development of Microsoft Sync Framework, Sync Services for ADO.NET, SQL Server Replication and Windows File Replication.

My Company: Raveable Hotel Reviews
My Sync Blog: The Synchronizer
My Sync WebSite: www.syncguru.com

Comments and Discussions