首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在多个DataTable插入中重用SqlDataAdapter

如何在多个DataTable插入中重用SqlDataAdapter
EN

Stack Overflow用户
提问于 2015-08-18 22:09:41
回答 3查看 387关注 0票数 0

给定加载了一些数据的DataTable,如何使用不同的SqlDataAdapter.Update()方法重用它来执行对不同Server数据库表的多个插入?

在使用DataTable将记录插入表1之后,不同的SqlDataAdapter将不会将数据插入表2,而Update()方法总是返回0而不引发异常。

我尝试使用Copy()RejectChanges()方法的DataTable,但它从来没有插入数据到表2。

一些代码:

代码语言:javascript
复制
var dataAdapter1 = new SqlDataAdapter
{
    UpdateBatchSize = updateBatchSize,
    InsertCommand = new SqlCommand(insertCommand1, dbConnection)
    {
        UpdatedRowSource = UpdateRowSource.None
    }
};
dataAdapter1 .InsertCommand.Parameters.Add("@Id", SqlDbType.Int, 0, "Id");  
dbConnection.Open();
dataAdapter1 .Update(dtSomeDataTable);
// This inserts data into table 1.
var dataAdapter2 = new SqlDataAdapter
{
    UpdateBatchSize = updateBatchSize,
    InsertCommand = new SqlCommand(insertCommand2, dbConnection)
    {
        UpdatedRowSource = UpdateRowSource.None
    }
};
var count = dataAdapter2.Update(dtSomeDataTable);
//This does not insert any records (or throws an exception) and variable count is always 0;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-20 19:11:22

通过保持原始DataTable不变并处理使用DataTable.Copy()方法创建的每个所需更新的副本来解决问题.如果有更好的答案,我会接受.

票数 0
EN

Stack Overflow用户

发布于 2015-08-18 22:38:46

看看这个MSDN帖子,了解DataRow.RowState:https://msdn.microsoft.com/en-us/library/ww3k31w0(v=vs.110).aspx的概念

当您在第一个SqlAdapter上调用Update时,所有行都被标记为未更改,随后的更新调用将不再考虑它们。

您可以尝试“触摸”每一行,方法是从其中一个列读取一个值并设置相同的值。这可能会导致RowState切换到修改,以便第二个更新操作再次对所有行起作用。

票数 0
EN

Stack Overflow用户

发布于 2015-08-20 07:36:27

也许在第二次调用更新之前,尝试在每个SetAdded上调用DataRow?

https://msdn.microsoft.com/en-us/library/system.data.datarow.setadded%28v=vs.110%29.aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32083403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档