ADO.NET - 使用Adapter.Update()插入父表中的列子集

时间:2011-09-13 10:12:56

标签: c# c#-4.0 ado.net

我有一个像这样的适配器 -

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

现在,Table1有3列 - Col1,Col2,Col3

我有一张带有Col1和Col3的表2。如何使用上述适配器将表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");

错误 - 其他信息:缺少SourceColumn'Col2'的DataTable'Table1'中的DataColumn'Col2'。

1 个答案:

答案 0 :(得分:0)

我做到了 -

a。使用新表(SELECT * FROM Table2)初始化SqlDataAdapter - 调用它

newAdapter
  

请确保您 - AcceptChangesDuringFill = false ,因为,稍后,   枚举行时,将rowstate设置为添加将无效   否则。

b。从Table1的数据表中删除不需要的列

c。将此数据表的行状态更新为“已添加”,如下所示 -

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

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

d。最后使用步骤a中创建的适配器“插入”。像这样 -

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