2011-09-13 49 views
0

我有一個這樣的適配器 -ADO.NET - 插入使用Adapter.Update()與列從父表的子集

var ds = new DataSet("T1"); 
adapter.Fill(ds, "Table1"); 

現在,表1有3列 - Col1中,col2的,COL3

我有一個表2與Col1和Col3。如何使用上述適配器插入的記錄選擇將表1中的列插入到表2中?我試過這個,但沒有運氣。

// remove the column which is not required 
ds.Tables["Table1"].Columns.Remove("Col2"); 

// clear the old table mappings 
adapter.TableMappings.Clear(); 

// create new table mappings 
DataTableMapping mapping = adapter.TableMappings.Add("Table2", ds.Tables["Table1"].ToString()); 
mapping.ColumnMappings.Add("Col1", ds.Tables["Table1"].Columns[0].ColumnName); 
mapping.ColumnMappings.Add("Col3", ds.Tables["Table1"].Columns[2].ColumnName); 

// fill the adapter with new Dataset 
var newDs = ds.Copy(); 
adapter.Fill(newDs); 
ds.Dispose(); 

// Insert records into new Table 
recordsUpdated += adapter.Update(newDs , "Table2"); 

錯誤 - 附加信息:缺少一個DataColumn的 'col2的' 在數據表 '表1' 的SourceColumn 'col2的'。

回答

0

我已經這樣做了 -

a.Initialise新表(SELECT * FROM表2)一個SqlDataAdapter - 稱之爲

newAdapter 

確保你做 - AcceptChangesDuringFill =假因爲後面的, 枚舉行時,將行狀態設置爲添加將不會工作 否則。

b.Remove從表1

的數據表

c.Update此數據表中的行狀態設置爲 '加' 這樣不必要的列 -

// 1st, commit all changes in the DataTable. 
dtTable1.AcceptChanges(); 

// update the row state 
foreach (DataRow row in dtTable1.Rows) 
{ 
    row.SetAdded(); 
} 

d.Finally「使用步驟a中創建的適配器插入'。像這樣 -

var recordsInserted = newAdapter.Update(dtTable1); // insert happens