本地数据缓存同步不会将客户端更改保存到sdf文件

时间:2009-11-20 10:02:02

标签: c# database data-binding caching microsoft-sync-framework

我创建了一个新的c#项目,并按照本教程中的步骤创建了一个LocalDataCache:

http://www.codeproject.com/KB/database/AdoSyncServicesArticalPKg.aspx?fid=1526739&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=2794305&fr=1#xx0xx

我接下来添加了以下代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TestLocalSync
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the table. You can move, or remove it, as needed.
            this.databaseTableAdapter.Fill(this.testDataSet.myTable);

        }

        private void Sync_Click(object sender, EventArgs e)
        {
            dataGridView1.EndEdit();



            // Call SyncAgent.Synchronize() to initiate the synchronization process.
            // Synchronization only updates the local database, not your project’s data source.
            LocalDataCache1SyncAgent syncAgent = new LocalDataCache1SyncAgent();

            syncAgent.testTable.SyncDirection = Microsoft.Synchronization.Data.SyncDirection.Bidirectional;

            Microsoft.Synchronization.Data.SyncStatistics syncStats = syncAgent.Synchronize();

           MessageBox.Show("Changes downloaded: " +
                    syncStats.TotalChangesDownloaded.ToString() +
                    Environment.NewLine +
                    "Changes uploaded: " + syncStats.TotalChangesUploaded.ToString());

            // TODO: Reload your project data source from the local database (for example, call the TableAdapter.Fill method).
            databaseTableAdapter.Fill(testDataSet.myTable);

            testDataSet.Merge(databaseTableAdapter.GetData());

            databaseTableAdapter.Update(testDataSet);            

        }

        private void Refresh_Click(object sender, EventArgs e)
        {
            databaseTableAdapter.Fill(testDataSet.myTable);
        }
    }
}

我对服务器上的数据库进行了一些更改并执行同步,然后它会更新客户端数据网格。当我重新加载应用程序时,客户端(sdf数据库)在同步发生之前是相同的,并且没有存储任何更改。

现在我不确定我错过了什么?一定要简单!任何建议都非常接受。

谢谢

1 个答案:

答案 0 :(得分:2)

现在已经解决了。

问题是database.sdf总是被复制到数据输出目录并覆盖我正在处理的数据库(手动进行更改以测试合并!)。

可以通过单击visual studio中的sdf文件来更改此设置,并在属性中将“复制到输出目录”的值更改为“不复制”。然后管理数据目录之外的连接字符串。默认值为Copy If newer导致问题!