C# 将给定数据表的所有行RowState设置为ADDED

C# 将给定数据表的所有行RowState设置为ADDED,c#,ado.net,C#,Ado.net,我想知道是否有任何方法可以一次性设置属于给定DataTable的所有行的RowStatus 背景: 我正在从数据库中获取一个DataTable,现在我想将DataTable按原样推送到不同的数据库中。现在的问题是,为了使用SqlDataAdapter.Update方法将DataTable推送到新数据库,它需要添加或修改RowState。在我的例子中,我已从数据库检索到数据,因此所有行的RowState都将保持不变 解决方案: 目前,我正在更新每行状态,如下所示: foreach (DataRow

我想知道是否有任何方法可以一次性设置属于给定DataTable的所有行的RowStatus

背景: 我正在从数据库中获取一个DataTable,现在我想将DataTable按原样推送到不同的数据库中。现在的问题是,为了使用SqlDataAdapter.Update方法将DataTable推送到新数据库,它需要添加或修改RowState。在我的例子中,我已从数据库检索到数据,因此所有行的RowState都将保持不变

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

foreach (DataRow row in MyDataTable.Rows)
{
   row.SetAdded();
}
是否有更好的解决方案可以在表级别一次性设置所有行的状态

备选办法:[保罗建议]

使用SqlBulkCopy我可以实现这一点。但我有这个方法的问题。调用WriteToServer后,如何知道插入了多少记录?一种方法是订阅SqlRowsCopied事件并设置mySqlBulkCopy.NotifyAfter=MyDataTable.Rows.Count,但这是事件驱动的


有没有办法在调用mySqlBulkCopy.WriteToServer后立即获得插入的行数?

您可以使用bulkcopy吗?例如:

using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
        {
            bulkCopy.DestinationTableName = 
                "dbo.DestinationTableName";

            try
            {
                bulkCopy.WriteToServer(sourceDataTable);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

谢谢你的回复!我可以,但SqlBulkCopy在将记录推送到数据库时不允许行级验证。我需要在更新行时进行验证。是否在调用大容量复制之前验证内存中的行?