我有一个像这样的适配器 -
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'。
答案 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