将给定DataTable的所有行RowState设置为ADDED

时间:2014-04-17 16:33:46

标签: c# ado.net

我想知道有没有办法将所有行的RowStatus一次性设置为给定的DataTable?

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

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

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

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

替代方法 [由保罗建议]

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

有没有办法在调用 mySqlBulkCopy.WriteToServer()后立即插入行数?

1 个答案:

答案 0 :(得分:0)

你能使用批量复制吗?如:

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