title: Cleaned up change tracking, nulling table anchors not working, ideas?
body: <p>I have a desktop client that is using the sync framework to synchronise the database to the server. I am experiencing problems occasionally with it "Cleaning up" the tables change tracking.</p>
  
  <p>I did some research and found a post on the internet that gave some code that resets the anchors on the table and then resynchronises. This is meant to cause the table to re-download, thus getting round the problem. <a href="http://social.microsoft.com/Forums/en-US/uklaunch2007ado.net/thread/0e2dd016-5d14-4cf9-aebc-93b762b42ec7" rel="nofollow noreferrer">(Source here)</a></p>
  
  <p>I implemented the code like so: </p>
  
  <p>=On Synchronisation:: =</p>
  
  <pre><code>catch (SyncException ex)
              {
                  Exception ex2 = ex.InnerException;
                  if (ex2.Message.Contains("cleaned up"))
                  {
                      try
                      {
                          syncStats = syncAgent.Synchronize(true); 
                          //pass in true so removes anchors
                      catch (Exception anothererror)
                      {
                          //This will hit with another error equaling “Cleaned-up” on a table.
                      }
                  }
  </code></pre>
  
  <p>= Sync Agent:: =</p>
  
  <pre><code>public SyncStatistics Synchronize(bool reinit)
          {
              if (!reinit)
                  return base.Synchronize();
              try
              {
                  ClientSyncProvider sqlCeProvider;
                  sqlCeProvider = (ClientSyncProvider)this.LocalProvider;
  
                  foreach (SyncTable st in this.Configuration.SyncTables)
                  {
                      if (st.SyncDirection != SyncDirection.Snapshot)
                      {
                          // Null anchors here
                          sqlCeProvider.SetTableReceivedAnchor(st.TableName, new SyncAnchor());
                      }
                  }
              }
              catch (Exception ex)
              {
              }
              return base.Synchronize();
          }
  </code></pre>
  
  <p>This code will detect the change tracking "cleaned up" error, then call Synchronize(true) and null all the anchors for each table, it then calls for another synchronization. This is the point it is meant to successfully synchronize, unfortunately this is not the case and will hit "catch (ex anothererror){" with another "cleaned up" exception.</p>
  
  <p>Any ideas where i am going wrong?</p>
  
  <p>Thanks,
  Kohan.</p>