2012-03-23 7 views
1

私はWindowsモバイル開発とMSFT Sync Frameworkの頭文字です。私は、バーコードを読み取り、データベースからエントリを取り出し、ユーザに新しい読みを入力させる単純なアプリケーションを持っています。それはすべて正常に動作します。私が同期しようとするとしかし、私は次の例外を取得:ここMicrosoft Sync Framework初心者 - 引数例外が処理されていません

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& 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() 

は私のコードです:

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 > 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()); 

     } 



    } 
} 

例外がこのラインでスローされます。

// Synchronize the databases 
       Microsoft.Synchronization.Data.SyncStatistics stats = syncAgent.Synchronize(); 

私がされていますどこにも解決策を見つけることができず、どんな助けでも大歓迎です!

EDIT:

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

しかし、それは例外を変更しなかった追加:私は持っていなかったので、それはあるかもしれないと思いました。

+0

'using'ステートメントがない場合、コードはコンパイルされません。 – ChrisF

+0

ElectricReadingCacheSyncAgentコードも投稿する必要があります。なぜなら、それは興奮が投げられる場所だからです。 –

+0

これはWCFに関連するエラーのようですが、どうやってクライアントサイドプロキシを生成しましたか? – JuneT

答えて

1

Web参照をダブルクリックして、オブジェクトブラウザで開きます。

ノードYourAppName.YourAppNameCacheWebRefを展開します。

YourNameCacheSyncServiceを右クリックし、[定義に移動]をクリックします。

Reference.csがコードエディタで開きます。

は、使用して、最後または輸入ステートメントの後に次のコードを追加します。

Imports Microsoft.Synchronization 
Imports Microsoft.Synchronization.Data 

または、C#で:

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

をYourNameCacheSyncService以外のファイル内のすべてのクラスと列挙を削除します。

関連する問題