首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >完成时的SQLBulkCopy行数

完成时的SQLBulkCopy行数
EN

Stack Overflow用户
提问于 2009-07-27 14:13:24
回答 8查看 21.6K关注 0票数 24

我正在使用SQLBulkCopy来移动大量数据。我实现了通知事件,以便在每次处理了一定数量的行时通知我,但在作业完成时不会触发OnSqlRowsCopied事件。如何在SQLBulkCopy写入器完成时获取复制的总行数?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-07-27 14:20:14

我认为您必须在完成后对表运行COUNT()查询,就像在MSDN示例here中一样。

除此之外,你不能提前告诉我吗?例如,如果您将一个DataTable传递给WriteToServer(),那么您可以通过对其执行.Rows.Count来知道有多少条记录。

票数 1
EN

Stack Overflow用户

发布于 2010-12-18 04:11:37

以下黑客攻击(使用反射)是一种选择:

    /// <summary>
    /// Helper class to process the SqlBulkCopy class
    /// </summary>
    static class SqlBulkCopyHelper
    {
        static FieldInfo rowsCopiedField = null;

        /// <summary>
        /// Gets the rows copied from the specified SqlBulkCopy object
        /// </summary>
        /// <param name="bulkCopy">The bulk copy.</param>
        /// <returns></returns>
        public static int GetRowsCopied(SqlBulkCopy bulkCopy)
        {
            if (rowsCopiedField == null)
            {
                rowsCopiedField = typeof(SqlBulkCopy).GetField("_rowsCopied", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance);
            }

            return (int)rowsCopiedField.GetValue(bulkCopy);
        }
    }

然后按如下方式使用该类:

int rowsCopied = SqlBulkCopyHelper.GetRowsCopied(bulkCopyObjectInYourCode);

希望这能有所帮助。

票数 31
EN

Stack Overflow用户

发布于 2017-06-16 01:08:02

下面是我所做的--这是对Rahul Modi在这个线程中的解决方案的轻微修改(基本上它只是将SqlRowsCopied事件内联起来,我认为在这个实例中这比创建新的事件处理程序方法要干净一些):

private long InsetData(DataTable dataTable, SqlConnection connection)
{
   using (SqlBulkCopy copier = new SqlBulkCopy(connection))
   {
      var filesInserted = 0L;

      connection.Open();

      copier.DestinationTableName = "dbo.MyTable";
      copier.NotifyAfter = dataTable.Rows.Count;
      copier.SqlRowsCopied += (s, e) => filesInserted = e.RowsCopied;
      copier.WriteToServer(dataTable);

      connection.Close();

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

https://stackoverflow.com/questions/1188384

复制
相关文章

相似问题

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