2015-03-25 3 views
0

Есть ли способ переопределить значения при объединении DataTables с использованием метода .Merge()?Как переопределить значения при объединении DataTables с использованием метода .Merge()?

Например, если у меня есть две таблицы данных с одинаковыми схемами.

Оба имеют две колонки: 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 DB, он даст мне инструкцию по ошибке из-за двух одинаковых значений в моем Первичном ключе (Именах).

Но я хочу 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; 
    } 

В основном я просто удалить все повторяющиеся строки, прежде чем я объединить и обновление, отлично работает для меня, но, вероятно, не является идеальным решением.

Смежные вопросы