比较DataTable中新旧数据
內容不寫了,代碼上都做了寫注釋。
? 1?? /** <summary>
? 2??????? /// 比較兩個數據表,并返回比較結果表
? 3??????? /// 比較條件:
? 4??????? /// 1.兩個表結構相同;
? 5??????? /// 2.兩個表排序都是按主鍵順序排序;
? 6??????? /// 3.兩個表都不為空;
? 7??????? /// </summary>
? 8??????? /// <param name="newTable">新數據</param>
? 9??????? /// <param name="oldTable">舊數據</param>
?10??????? /// <param name="parmaryKey">表主鍵名稱</param>
?11??????? /// <param name="colState">狀態列名稱</param>
?12??????? /// <param name="stateValue">不相同時狀態值</param>
?13??????? /// <returns>結果數據表? </returns>
?14??????? public static DataTable CompareData(
?15??????????? this DataTable newTable, 
?16??????????? DataTable oldTable,
?17??????????? string parmaryKey, 
?18??????????? string colState,
?19??????????? object stateValue)
?20??????? {
?21??????????? int newTableCount = newTable.Rows.Count;
?22??????????? int oldTableCount = oldTable.Rows.Count;
?23
?24??????????? /**/比較結果表
?25??????????? DataTable resultTable = newTable.Clone();
?26
?27??????????? int i = 0, j = 0;
?28??????????? do
?29??????????? {
?30??????????????? DataRow dr1 = null;
?31??????????????? DataRow dr2 = null;
?32
?33??????????????? /**/結果行
?34??????????????? DataRow rDr = resultTable.NewRow();
?35
?36??????????????? /**/如果超出舊表,則新表所有其他列進行添加
?37??????????????? if (j < oldTableCount)
?38??????????????? {
?39??????????????????? dr2 = oldTable.Rows[j];
?40??????????????? }
?41??????????????? else
?42??????????????? {
?43??????????????????? for (int k = i; k < newTableCount; k++)
?44??????????????????? {
?45??????????????????????? DataRow rDr2 = resultTable.NewRow();
?46??????????????????????? rDr2.ItemArray = newTable.Rows[k].ItemArray;
?47??????????????????????? resultTable.Rows.Add(rDr2);
?48??????????????????? }
?49??????????????????? /**/添加完成后退出
?50??????????????????? break;
?51??????????????? }
?52
?53??????????????? /**/如果超出新表,則將舊表剩余數據設置狀態值并添加到結果表中
?54??????????????? if (i < newTableCount)
?55??????????????? {
?56??????????????????? dr1 = newTable.Rows[i];
?57??????????????? }
?58??????????????? else
?59??????????????? {
?60??????????????????? for (int k = j; k < oldTableCount; k++)
?61??????????????????? {
?62??????????????????????? DataRow rDr2 = resultTable.NewRow();
?63??????????????????????? rDr2.ItemArray = oldTable.Rows[k].ItemArray;
?64??????????????????????? rDr2[colState] = stateValue;
?65??????????????????????? resultTable.Rows.Add(rDr2);
?66??????????????????? }
?67??????????????????? /**/添加完成后退出
?68??????????????????? break;
?69??????????????? }
?70
?71??????????????? int result = string.Compare(dr1[parmaryKey].ToString(), dr2[parmaryKey].ToString(), true);
?72
?73??????????????? switch (result)
?74??????????????? {
?75??????????????????? /**/新表小于則移動新表
?76??????????????????? case -1:
?77??????????????????????? i++;
?78??????????????????????? rDr.ItemArray = dr1.ItemArray;
?79??????????????????????? resultTable.Rows.Add(rDr);
?80??????????????????????? break;
?81
?82??????????????????? /**/相同加入結果,兩個表同時向下移動
?83??????????????????? case 0:
?84??????????????????????? i++; j++;
?85??????????????????????? rDr.ItemArray = dr1.ItemArray;
?86??????????????????????? resultTable.Rows.Add(rDr);
?87??????????????????????? break;
?88
?89??????????????????? /**/新表大于則移動舊表
?90??????????????????? case 1:
?91??????????????????????? j++;
?92??????????????????????? rDr.ItemArray = dr2.ItemArray;
?93??????????????????????? rDr[colState] = stateValue;
?94??????????????????????? resultTable.Rows.Add(rDr);
?95??????????????????????? break;
?96
?97??????????????? }
?98??????????? } while (i <= newTableCount);
?99
100??????????? return resultTable;}
?
轉載于:https://www.cnblogs.com/wwwzzg168/p/3568988.html
總結
以上是生活随笔為你收集整理的比较DataTable中新旧数据的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 孕妇梦到两条黑鱼是什么意思
- 下一篇: struts.properties文件
