完成时SQLBulkCopy行计数

sqlbulkcopy sql-server

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

一般承认的答案

我认为你必须在完成后在表上运行COUNT()查询,就像在这里的MSDN示例中一样。

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


热门答案

以下hack(使用反射)是一个选项:

    /// <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);

希望这可以帮助。



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因