Я использую SQLBulkCopy для перемещения больших объемов данных. Я внедрил событие уведомления, чтобы уведомлять меня каждый раз, когда определенное количество строк было обработано, но событие OnSqlRowsCopied не срабатывает, когда задание завершено. Как получить общее количество строк, скопированных при завершении SQLBulkCopy writetoserver?
Следующий взлом (с использованием отражения) - это вариант:
/// <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);
Надеюсь это поможет.