C#数据库合并/复制

时间:2011-10-11 09:00:49

标签: c# ms-access merge dataset replication

我想为基于MS Access的应用程序创建复制解决方案。我有2-4个站点在数据库中创建内容,并且它们都处于脱机状态。到目前为止我的解决方案:

从“文件”菜单调用的函数:

class main
{
private void menuItemMergeUserData_Click(object sender, EventArgs e)
        {
            OpenFileDialog openDataFileDialog = new OpenFileDialog();

            openDataFileDialog.Title = "Select UserData file to merge";
            openDataFileDialog.InitialDirectory = System.IO.Directory.GetCurrentDirectory();
            openDataFileDialog.Filter = "Database files (*.mdb)|*.mdb|All files (*.*)|*.*";
            openDataFileDialog.RestoreDirectory = true;

            if (openDataFileDialog.ShowDialog() == DialogResult.OK)
            {
                ExternalUserManager UserManager = new ExternalUserManager(openDataFileDialog.FileName, CompanyID, dbManager);
                if (UserManager.MergeUserTables())
                    MessageBox.Show("UserData merged!", "UserData");
            }
            openDataFileDialog.Dispose();
        }
}

在类ExternalUserManager中调用的函数

 public bool MergeUserTables()
        {
            bool bOk = true;

            try
            {
                //databaseManager.CallMacro(dbMyFileName);

                conUserData.Open();


                daClass.Fill(dsUserData, "Class");
                daClassUsers.Fill(dsUserData, "ClassUsers");
                daCompany.Fill(dsUserData, "Company");
                daCurriculum.Fill(dsUserData, "Curriculum");
                daCurriculumExercises.Fill(dsUserData, "CurriculumExercises");
                daCurriculumMissions.Fill(dsUserData, "CurriculumMissions");
                daCurriculumTasks.Fill(dsUserData, "CurriculumTasks");
                daUserModes.Fill(dsUserData, "UserModes");
                daUserProfile.Fill(dsUserData, "UserProfile");
                daUsers.Fill(dsUserData, "Users");
                bOk = databaseManager.MergeDataSet(dsUserData);

            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString(), "Reading UserData");
            }
            finally
            {
                conUserData.Close();
            }

            return bOk;
        }

在类DatabaseManager中调用的函数

public bool MergeDataSet(DataSetUserContent dsExternalUserContent)
        {
            bool bOk = false;
            try
            {

                this.dsUserContent.MergeFailed += new MergeFailedEventHandler(OnMergeFailed);
                this.dsUserContent.Merge(dsExternalUserContent);
                if(this.dsUserContent.HasChanges())
                    bOk = SaveUsers();
             }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString(), "LogData Merge");
            }
            finally
            {
                conLogData.Close();
            }

            return bOk;
        }

DataSet按我的意愿合并,但导入数据库中的新行未保存到数据库???

搜索此问题的解决方案,并some say设置AcceptChangesDuringFill = false。试了但是这使得导入数据库中的所有行都被添加为源数据库中的新行。

1 个答案:

答案 0 :(得分:0)

如果所有应用程序都处于脱机状态,为什么不直接复制mdb文件?

这很粗糙,我知道,但它应该可以正常工作。