完成時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合法嗎? 是的,了解原因