![](/img/trans.png)
[英]How to multiply and Sum 2 columns of datatables using jquery? - Datatables
[英]How to override values in merging DataTables using .Merge() method?
有沒有一種方法可以覆蓋使用.Merge()方法合並DataTable中的值?
例如,如果我有兩個具有相同原理圖的數據表。
兩者都有兩列: Names | Enabled;
Names | Enabled;
DataTable1的第一行條目是: Peter Punani | true;
Peter Punani | true;
DataTable2的第一行條目是: Peter Punani | false;
Peter Punani | false;
如果我使用.Merge()方法合並它們-DataTable1.merge DataTable1.merge(DataTable2);
-,DataTable1將具有2行,如下所示:
Names | Enabled;
Peter Punani | true;
Peter Punani | false;
現在很明顯,如果我嘗試使用SqlCommandBuilder到我的SQL DB進行.Update()操作,由於我的主鍵(名稱)中有兩個相同的值,它將給我一個錯誤聲明。
但是我希望DB1接受與DB2的區別,所以它看起來像:(並使用與DB1不同的所有其他條目來做到這一點。)
Names | Enabled;
Peter Punani | false;
那么合並這些表的最佳方法是什么,以便我可以正確地更新它們?
我現在以這種方式實現了我的方法:
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;
}
基本上,我只是在合並和更新之前刪除所有重復的行,對我來說效果很好,但可能不是理想的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.