2010-07-09 39 views
0

我有三個數據表的數據:從數據表中選擇到數據表

table1 has columns AGE, FIRST_NAME, LAST_NAME, FAVORITE_COLOR, PHONE 
table2 has columns AGE, FIRST_NAME, LAST_NAME, PHONE 
table3 has columns AGE, LAST_NAME, FIRST_NAME, FAVORITE_COLOR, PHONE 

我也有第四個表,我需要填寫與前三個表中的所有數據。

table4 has columns AGE, LAST_NAME, FIRST_NAME, PHONE 

任何想法如何做到這一點?

+4

你爲什麼要爲table4而不是視圖創建表? – 2010-07-09 12:06:22

+0

表4看起來與表3相同,而不是'FAVORITE_COLOR'字段。 – 2010-07-09 12:11:08

+0

table1,table2和table3都是從三個不同的CSV文件中讀取的。我需要將CSV文件中的數據推送到數據庫中,但他們有不同的列和列順序。 – tkalve 2010-07-09 12:24:24

回答

0

DataTable中有一個稱爲 「合併」 的方法,所以:

table4.Merge(table1, true, MissingSchemaAction.Ignore) // ignores any columns that are not in table4's schema 
table4.Merge(table2, true, MissingSchemaAction.Ignore) 
table4.Merge(table3, true, MissingSchemaAction.Ignore) 

假設你有給出table4首先你想要的列,當然,使用

table4.Columns.Add 
1

聽起來你正在以錯誤的方式解決問題;線索就是你複製數據並尋求合併表的方式。

這種事情通常會在數據訪問層(DAL)中實現,即通過更好的數據庫查詢來實現。

也許如果您提供了一些更多的背景信息來解決您嘗試實現的問題,我們將能夠分析並看看我們是否能夠提出更好的解決方案。對不起,如果這聽起來光顧,它不是 - 正如你知道有無數解決軟件問題的方法!

希望有幫助!

1

嘗試.ImportRow:

var dtA = new DataTable 
{ 
    Columns = 
    {    
     { "Age", typeof(int) }, 
     { "Middlename", typeof(string) }, 
     { "Firstname", typeof(string) } 
    } 
}; 

dtA.Rows.Add(1, "Yeah", "John"); 
dtA.Rows.Add(2, "Yo", "Paul"); 

var dtB = new DataTable 
{ 
    Columns = 
    { 
     { "Age", typeof(int) }, 
     { "Firstname", typeof(string) } 
    } 
}; 

dtB.Rows.Add(3, "George"); 
dtB.Rows.Add(4, "Ringo"); 



foreach (DataRow r in dtA.Rows) 
    dtB.ImportRow(r); 


foreach (DataRow r in dtB.Rows) 
{ 
    MessageBox.Show(string.Format("{0} {1}", r["Age"], r["Firstname"])); 
} 
0

你可以嘗試這樣的事:

DataSet dataset; //dataset with all datatables (table1, table2, table3) 
DataTable table4; //datatable with the result "union" 
foreach (DataTable dt in dataset.Tables) 
{ 
    foreach (DataRow dr in dt.Rows) 
    { 
     DataRow nr = table4.NewRow(); 
     foreach (DataColumn dc in table4.Columns) 
     { 
      try 
      { 
       nr[dc.ColumnName] = dr[dc.ColumnName]; 
      } 
      catch 
      { 
       nr[dc.ColumnName] = "COLUMN NOT FOUND"; 
      } 
     } 
     table4.Rows.Add(nr); 
    } 
}