搜尋此網誌

2011年7月8日 星期五

將二個DataTable合併

一般在使用資料庫關聯或資料庫合併時,可能會將某個Table1資料先拉到DataSet1,在把某個Table2資料拉到DataSet2,在用迴圈一筆一筆的加進去。
不然就是直接在資料庫就把資料交給StoreProcedure處理。
但是現在如果是在PDA上作這動作,可能會考慮到效能,或是SQL CE沒有StoreProcedure可以使用。
這理提供一個方法,就是DataTable.Merge 有三種多載

1.DataTable.Merge (DataTable) 
將指定的 DataTable 與目前的 DataTable 合併。
合併的DataTable結構需一致。
2.DataTable.Merge (DataTable, Boolean) 
合併指定的 DataTable 與目前的 DataTable,指出是否保留目前 DataTable 中的變更。
合併的DataTable結構需一致。相同的DataRows是否要保留。
3.DataTable.Merge (DataTable, Boolean, MissingSchemaAction) 
合併指定的 DataTable 與目前的 DataTable,指出是否保留變更,以及如何處理目前在 DataTable 中缺少的結構描述。 
合併的DataTable結構無需一致,但是合併時,需告知沒有的欄位是否要加入現有欄位中(只加欄位內容為NULL)。

代碼: 
DataTable dtAA = new DataTable();
DataTable dtAB = new DataTable();

string trsql = "";
trsql = "Select AB001, AB002, AB003 , AB004 , AB005 , AB007, AB005, AB006, AB007 From BCH_INVAB ";
trsql += " Where AB001 = '" + exno + "'";
dtAB = SELECTSQLCE(trsql);
DataColumn [] key = new DataColumn[1];
key[0] = dtAB.Columns["AB003"];
dtAB.PrimaryKey = key;

trsql = "";
trsql = "Select AA001 AS AB003, AA002, AA003 + AA004 + 
(Case AA005 When '' Then '' Else '-' + AA005 + 'U' End) AS AA003_1 , AA006, ";
trsql += " AA003,AA004,AA005,AA007, AA008, AA009, AA010, AA011, AA012, AA013, AA014, 
AA015, AA016, AA017, AA018, AA019, AA020 ";
trsql += "From BCH_ASTAA Where AA001 In (Select AB003 From BCH_INVAB Where AB001 = '" + exno + "')";
dtAA = SELECTSQLCE(trsql);
DataColumn[] key1 = new DataColumn[1];
key1[0] = dtAA.Columns["AB003"];
dtAA.PrimaryKey = key1;

dtAA.Merge(dtAB,false,MissingSchemaAction.Add);


上面的程式碼中,可以看出二個Table結構完全不同,一個是AA一個是AB,但是AA001==AB003有關聯,因此就可利用這二個欄位來當作Key值來合併。

沒有留言:

張貼留言