2015-03-25 33 views
0

有没有办法使用.Merge()方法来合并DataTables中的值?如何覆盖使用.Merge()方法合并DataTables中的值?

例如,如果我有两个具有相同原理图的DataTable。

两个有两列:Names | Enabled;

DataTable1第一行的项目有:Peter Punani | true;

DataTable2第一行的项目有:Peter Punani | false;

如果我使用合并.Merge()方法他们 - DataTable1.merge(DataTable2); - , DataTable1将有2行,如下所示:

Names | Enabled; 
Peter Punani | true; 
Peter Punani | false; 

现在显然如果我尝试使用.Update(),使用SqlCommandBuilder到我的SQL数据库,它会给我一个错误语句,因为我的主键(名称)中有两个相同的值。

但我想DB1接受来自DB2的差异,所以它看起来像:(和做与从DB1不同的所有其他条目。)

Names | Enabled; 
Peter Punani | false; 

那么什么是合并的最佳方式这些表,所以我可以正确更新它们?

回答

0

我只是执行我的方法这种方法现在:

public static bool synchSqlData(DataTable UpdateTable, string selectedTableName, SqlConnection sqlCon, DataTable MergeTable, bool merge) 
    { 
     bool success = false; 
     //Mitgabe eines SELECT cmds für SqlCommandBuilder zum generieren von INSERT,DELETE und UPDATE 
     using (SqlCommand sqlCom = new SqlCommand("SELECT * FROM dbo." + selectedTableName, sqlCon)) 
     { 
      SqlDataAdapter da = new SqlDataAdapter(sqlCom); 
      SqlCommandBuilder cmb = new SqlCommandBuilder(da); 

      da.InsertCommand = cmb.GetInsertCommand(); 
      da.DeleteCommand = cmb.GetDeleteCommand(); 
      da.UpdateCommand = cmb.GetUpdateCommand(); 

      //Zuweisen von PKs 
      UpdateTable.PrimaryKey = new DataColumn[] { UpdateTable.Columns[0] }; 
      MergeTable.PrimaryKey = new DataColumn[] { MergeTable.Columns[0] }; 

      //Zusammenführen der beiden DataTables in UpdateTable 
      if (merge) 
      { 
       //Setzen der Rows auf changed damit sie bei da.Update() auch erkannt werden ;) 
       foreach (DataRow dr in MergeTable.Rows) 
       { 
        if (dr.RowState == DataRowState.Unchanged) 
        { 
         dr.SetAdded(); 
        } 
        //Entfernen von doppelten Zeilen zur Änderung einzelner values 
        DataRow doubleRow = UpdateTable.Rows.Find(dr[0].ToString()); 
        if (doubleRow != null) 
        { 
         doubleRow.Delete(); 
        } 
       } 
       UpdateTable.Merge(MergeTable); 
       MessageBox.Show("Merge abgeschlossen."); 
      } 

      try 
      { 
       da.Update(UpdateTable); 
       success = true; 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Error has occured!" + ex.Message); 
       success = false; 
      } 
     } 
     return success; 
    } 

基本上我只是删除所有重复的行之前,我合并和更新,工作正常,但对我来说可能不是理想的解决方案。