【问题标题】:Set all rows RowState to ADDED for a given DataTable将给定 DataTable 的所有行 RowState 设置为 ADDED
【发布时间】:2014-04-17 16:33:46
【问题描述】:

我想知道有什么方法可以一次性设置所有行的 RowStatus 属于给定的 DataTable 吗?

背景: 我正在从数据库中获取数据表,现在我想将DataTable 按原样推送到不同的数据库。现在,问题是,为了使用SqlDataAdapter.Update 方法将DataTable 推送到新数据库,它需要RowStateAddedModified。就我而言,我已从数据库中检索数据,因此所有行都将具有 RowState Unchanged

解决方案: 目前我正在更新每一行的状态,如下所示:

foreach (DataRow row in MyDataTable.Rows)
{
   row.SetAdded();
}

有没有更好的解决方案,我可以在表格级别一次性设置所有行的状态?

替代方法[保罗建议]

使用SqlBulkCopy 我可以做到这一点。但我对这种方法有疑问。一旦我打电话给WriteToServer,我怎么知道插入了多少条记录?一种方法是订阅SqlRowsCopied 事件并设置mySqlBulkCopy.NotifyAfter = MyDataTable.Rows.Count,但这是事件驱动的。

有什么方法可以在调用mySqlBulkCopy.WriteToServer()后立即获得插入的行数?

【问题讨论】:

    标签: c# ado.net


    【解决方案1】:

    您可以使用批量复制吗?如:

    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                bulkCopy.DestinationTableName = 
                    "dbo.DestinationTableName";
    
                try
                {
                    bulkCopy.WriteToServer(sourceDataTable);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
    

    http://msdn.microsoft.com/en-us/library/ex21zs8x.aspx

    【讨论】:

    • 感谢您的回复!我可以,但是 SqlBulkCopy 在将记录推送到数据库时不允许行级别验证。我需要在更新一行时进行验证。
    • 在调用批量复制之前验证内存中的行?
    猜你喜欢
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 2013-02-22
    • 2013-04-23
    • 1970-01-01
    相关资源
    最近更新 更多