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

发布于 2024-12-04 10:49:32 字数 999 浏览 0 评论 0原文

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

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

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

我有一个包含 Col1 和 Col3 的表 2。如何使用上述适配器将 Table1 中选定列的记录插入到 Table2 中?我尝试过这个,但没有运气。

// 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");

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

I have a adapter like this -

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

Now, Table1 has 3 columns - Col1, Col2, Col3

I have a Table 2 with Col1 and Col3. How can I use the above adapter to Insert records for only selected columns from Table1 into Table2 ? I tried this, but no luck.

// 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");

ERROR - Additional information: Missing the DataColumn 'Col2' in the DataTable 'Table1' for the SourceColumn 'Col2'.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

挖鼻大婶 2024-12-11 10:49:32

我已经这样做了 - a.

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

newAdapter

确保您做出 - AcceptChangesDuringFill = false 因为稍后,
枚举行时,将行状态设置为已添加将不起作用
否则。

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

I have done this -

a.Initialise a SqlDataAdapter with the new Table (SELECT * FROM Table2) - call it

newAdapter

Make sure you make - AcceptChangesDuringFill = false because, later,
while enumerating rows, setting the rowstate to added will not work
otherwise.

b.Remove the unwanted column from the data table of Table1

c.Update the row state of this data table to 'Added' like this -

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

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

d.Finally 'insert' using the adapter created in Step a. like this -

var recordsInserted = newAdapter.Update(dtTable1); // insert happens
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文