Невозможно получить обновленное значение из метода другого класса

Ниже мой класс:

MsSql.cs:

public class MSSqlBLL
{
    public static long RowsCopied { get; set; }

    public long BulkCopy()
    {
        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn))
        {
            bulkCopy.DestinationTableName = "dbo.Table1";
            bulkCopy.BatchSize = 100;
            bulkCopy.SqlRowsCopied +=
                new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
            bulkCopy.NotifyAfter = 100;
            try
            {
                bulkCopy.WriteToServer(reader);

            }
            return RowsCopied;
        }
    }

    private static void OnSqlRowsCopied(object sender, SqlRowsCopiedEventArgs e)
    {
        RowsCopied = RowsCopied + e.RowsCopied;
    }
}

Я вызываю функцию BulkCopy из этого класса и хочу получить текущую обработанную запись в моей переменной затронутых записей.

Например: для каждой итерации цикла я хотел бы получить затронутые записи в моей переменной затронутых строк.

public class MySqlBLL
{
    public void GetTotalRows()
        {
            int  totalRecords = 500;
            var table = "Table1";
            for (int i = 0; i < totalRecords / 100; i++) //
             {
                     query = "SELECT * FROM " + table + " LIMIT " + 0 + "," + 100;
                     var reader = Execute(conn, query);
                     long affectedRecords = msSql.BulkCopy();
                     reader.Close();
             }
        }
}

В приведенном выше методе я отправляю данные по частям в метод BulkCopy для выполнения массового копирования, но для каждой массовой копии я хотел бы получить количество записей, которые обрабатываются массовой копией , но проблема в том, что я получаю 0 в затронутых записях переменная.

Я хочу получить доступ к текущим строкам, обработанным массовой копией sql.


person Learning-Overthinker-Confused    schedule 21.12.2016    source источник


Ответы (1)


Свойство RowsCopied обновляется только после копирования 100 записей (как установлено с помощью NotifyAfter). Если вы разместите

Console.WriteLine("Copied {0} so far...", e.RowsCopied);

в обработчике событий OnSqlRowsCopied вы будете получать текущий прогресс в случае консольного приложения. Но в вашем случае вы можете просто выбрать count(*) из исходной таблицы, чтобы показать количество.

-Источник< /а>

person Vivek Raj    schedule 21.12.2016