比較兩個DataSet,並由此產生新的DataSet
/// <summary>
/// 比較兩個DataSet,併產生增量數據
/// </summary>
/// <param name="oldDataSet">原始DataSet</param>
/// <param name="nowDataSet">現有DataSet</param>
/// <param name="primaryKey">原始DataSet和現有DataSet Tables[0]的主鍵</param>
/// <returns>DataSet</returns>
public DataSet CompareDataSet(DataSet oldDataSet,DataSet nowDataSet,string primaryKey)
{
//更新nowDataSet中的所有行,使之狀態爲DataRowState.UnChanged
nowDataSet.AcceptChanges();
//要返回的DataSet
DataSet newDataSet = new DataSet();
//設置oldDataSet 和 newDataSet Tables[0] 的主鍵
DataColumn dcOld = oldDataSet.Tables[0].Columns[primaryKey];
DataColumn dcNow = nowDataSet.Tables[0].Columns[primaryKey];
//設置主鍵
oldDataSet.Tables[0].PrimaryKey = new DataColumn[1] { dcOld };
nowDataSet.Tables[0].PrimaryKey = new DataColumn[1] { dcNow };
string primaryValue = string.Empty;
string where = string.Empty;
foreach (DataRow drNow in nowDataSet.Tables[0].Rows)
{
//每行數據中,主鍵列所對應的值
primaryValue = drNow[primaryKey].ToString();
where = primaryKey + " = '" + primaryValue + "'";
//在oldDataSet 中查找和主鍵相同的行
DataRow[] drOld = oldDataSet.Tables[0].Select(where);
if (drOld.Length == 0)
{
drNow.SetModified();
}//說明nowDataSet中的這行數據是新增加的數據
else
{
for (int i = 0; i < drNow.ItemArray.Length; i++)
{
if (drNow.ItemArray.GetValue(i).ToString().Equals(drOld[0].ItemArray.GetValue(i).ToString()) == false)
{
drNow.SetModified();
break;
}//說明nowDataSet中的這行數據是修改過的數據
}
}//判斷兩行中的每一列是否相等
}
//裝載DataRowState爲 Modified的行
newDataSet.Tables.Add(nowDataSet.Tables[0].GetChanges(DataRowState.Modified));
return newDataSet;
}
/// 比較兩個DataSet,併產生增量數據
/// </summary>
/// <param name="oldDataSet">原始DataSet</param>
/// <param name="nowDataSet">現有DataSet</param>
/// <param name="primaryKey">原始DataSet和現有DataSet Tables[0]的主鍵</param>
/// <returns>DataSet</returns>
public DataSet CompareDataSet(DataSet oldDataSet,DataSet nowDataSet,string primaryKey)
{
//更新nowDataSet中的所有行,使之狀態爲DataRowState.UnChanged
nowDataSet.AcceptChanges();
//要返回的DataSet
DataSet newDataSet = new DataSet();
//設置oldDataSet 和 newDataSet Tables[0] 的主鍵
DataColumn dcOld = oldDataSet.Tables[0].Columns[primaryKey];
DataColumn dcNow = nowDataSet.Tables[0].Columns[primaryKey];
//設置主鍵
oldDataSet.Tables[0].PrimaryKey = new DataColumn[1] { dcOld };
nowDataSet.Tables[0].PrimaryKey = new DataColumn[1] { dcNow };
string primaryValue = string.Empty;
string where = string.Empty;
foreach (DataRow drNow in nowDataSet.Tables[0].Rows)
{
//每行數據中,主鍵列所對應的值
primaryValue = drNow[primaryKey].ToString();
where = primaryKey + " = '" + primaryValue + "'";
//在oldDataSet 中查找和主鍵相同的行
DataRow[] drOld = oldDataSet.Tables[0].Select(where);
if (drOld.Length == 0)
{
drNow.SetModified();
}//說明nowDataSet中的這行數據是新增加的數據
else
{
for (int i = 0; i < drNow.ItemArray.Length; i++)
{
if (drNow.ItemArray.GetValue(i).ToString().Equals(drOld[0].ItemArray.GetValue(i).ToString()) == false)
{
drNow.SetModified();
break;
}//說明nowDataSet中的這行數據是修改過的數據
}
}//判斷兩行中的每一列是否相等
}
//裝載DataRowState爲 Modified的行
newDataSet.Tables.Add(nowDataSet.Tables[0].GetChanges(DataRowState.Modified));
return newDataSet;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.