Recuento de filas de SQLBulkCopy cuando se complete

sqlbulkcopy sql-server

Pregunta

Estoy utilizando SQLBulkCopy para mover grandes cantidades de datos. Implementé el evento de notificación para notificarme cada vez que se haya procesado un cierto número de filas, pero el evento OnSqlRowsCopied no se activa cuando se completa el trabajo. ¿Cómo obtengo el número total de filas copiadas cuando se completa el writetoserver de SQLBulkCopy?

Respuesta aceptada

Creo que tienes que ejecutar una consulta COUNT () en la tabla después de terminar, como en el ejemplo de MSDN aquí .

Aparte de eso, ¿no puedes decirlo por adelantado? por ejemplo, si está pasando un DataTable a WriteToServer (), entonces sabrá cuántos registros haciendo un .Rows.Count en él.


Respuesta popular

El siguiente hack (usando reflexión) es una opción:

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

Y luego use la clase de la siguiente manera:

int rowsCopied = SqlBulkCopyHelper.GetRowsCopied(bulkCopyObjectInYourCode);

Espero que esto ayude.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué