title: Microsoft Sync Framework Newbie - Argument Exception was unhandled
body: <p>I am very new to windows mobile development and MSFT Sync Framework as a heads up. I have a simple application that reads a barcode, retrieves entry from a database and lets the user enter a new reading. That all works just fine. However, when I attempt to synchronize I get the following exception:</p>
  
  <pre><code>System.ArgumentException was unhandled
    Message="ArgumentException"
    StackTrace:
         at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean verifyAccess, StackCrawlMark&amp; stackMark)
         at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
         at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
         at Microsoft.Synchronization.Data.ServerSyncProviderProxy.ApplyChanges(SyncGroupMetadata groupMetadata, DataSet dataSet, SyncSession syncSession)
         at Microsoft.Synchronization.SyncAgent.UploadChanges(SyncGroupMetadata groupMetadata)
         at Microsoft.Synchronization.SyncAgent.Synchronize()
         at ElectricBarcodeApp.Form1.buttonSync_Click(Object sender, EventArgs e)
         at System.Windows.Forms.Control.OnClick(EventArgs e)
         at System.Windows.Forms.Button.OnClick(EventArgs e)
         at System.Windows.Forms.ButtonBase.WnProc(WM wm, Int32 wParam, Int32 lParam)
         at System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam)
         at Microsoft.AGL.Forms.EVL.EnterMainLoop(IntPtr hwnMain)
         at System.Windows.Forms.Application.Run(Form fm)
         at ElectricBarcodeApp.Program.Main()
  </code></pre>
  
  <p>Here is my code:</p>
  
  <pre><code>using System;
  using System.Linq;
  using System.Collections.Generic;
  using System.ComponentModel;
  using System.Data;
  using System.Drawing;
  using System.Text;
  using System.Windows.Forms;
  using System.Data.SqlServerCe;
  using System.IO;
  using System.Reflection;
  
  namespace ElectricBarcodeApp
  {
      public partial class Form1 : Form
      {
          public Form1()
          {
              InitializeComponent();
          }
  
          private void buttonStart_Click(object sender, EventArgs e)
          {
              using (SqlCeConnection conn = new SqlCeConnection(
              ("Data Source=" + (Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase), "ElectricReading.sdf") + ";Max Database Size=2047"))))
              {
  
                  // Connect to the local database 
                  conn.Open();
                  using (SqlCeCommand cmd = conn.CreateCommand())
                  {
                      SqlCeParameter param = new SqlCeParameter();
                      param.ParameterName = "@Barcode";
                      param.DbType = DbType.String;
                      param.Value = textBarcode.Text.Trim();
  
                      // SELECT rows
                      cmd.CommandText = "SELECT Location, Reading FROM Main2 WHERE Barcode LIKE @Barcode";
                      cmd.Parameters.Add(param);
  
                      DataTable data = new DataTable();
  
                      using (SqlCeDataReader reader = cmd.ExecuteReader())
                      {
  
                              data.Load(reader);
                              this.dataGrid1.DataSource = data;
  
                      }
  
                  }
              }
  
  
          }
  
          private void buttonEnter_Click(object sender, EventArgs e)
          {
              using (SqlCeConnection conn = new SqlCeConnection(
              ("Data Source=" + (Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase), "ElectricReading.sdf") + ";Max Database Size=2047"))))
              {
  
                  // Connect to the local database 
                  conn.Open();
                  using (SqlCeCommand cmd = conn.CreateCommand())
                  {
  
                      // INSERT NEW READING
                      cmd.CommandText = "UPDATE Main2 SET Reading = '" + textNewReading.Text.Trim() + "' WHERE Barcode LIKE '" + textBarcode.Text.Trim() + "'"; 
  
                      int m = cmd.ExecuteNonQuery();
                      cmd.ExecuteNonQuery();
                      if (m &gt; 0)
                      {
                          MessageBox.Show("New Reading Successfully Entered:" + textNewReading.Text.Trim(), "Confirmation", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
                      }
  
                  }
              }
  
          }
  
          private void buttonSync_Click(object sender, EventArgs e)
          {
              // The WCF Service
              ElectricReadingCacheWebRef.ElectricReadingCacheSyncService webSvcProxy = new
                  ElectricBarcodeApp.ElectricReadingCacheWebRef.ElectricReadingCacheSyncService();
  
              // The Remote Server Provider Proxy
              Microsoft.Synchronization.Data.ServerSyncProviderProxy serverProvider = new
                  Microsoft.Synchronization.Data.ServerSyncProviderProxy(webSvcProxy);
  
              // The Sync Agent
              ElectricReadingCacheSyncAgent syncAgent = new ElectricReadingCacheSyncAgent();
              syncAgent.RemoteProvider = serverProvider;
              //Main2 is the table to be synchronized
              syncAgent.Main2.SyncDirection = Microsoft.Synchronization.Data.SyncDirection.Bidirectional;
  
              // Synchronize the databases
              Microsoft.Synchronization.Data.SyncStatistics stats = syncAgent.Synchronize();
  
              // Show synchronization statistics
              MessageBox.Show("Changes Downloaded: " + stats.TotalChangesDownloaded.ToString() +
                  "\r\n" + "Changes Uploaded: " + stats.TotalChangesUploaded.ToString());
  
          }
  
  
  
      }
  }
  </code></pre>
  
  <p>The exception is thrown at this line:</p>
  
  <pre><code>// Synchronize the databases
                  Microsoft.Synchronization.Data.SyncStatistics stats = syncAgent.Synchronize();
  </code></pre>
  
  <p>I have been getting nowhere on finding a solution and any help is greatly appreciated!</p>
  
  <p>EDIT: I thought it might be because I did not have: </p>
  
  <pre><code>using Microsoft.Synchronization;
  using Microsoft.Synchronization.Data;
  </code></pre>
  
  <p>But adding that did not change the exception.</p>