2016-06-30 5 views
1

Мне нужен индикатор выполнения для моего приложения. Я загружаю данные через текстовый файл в SQL Server, но это занимает много времени, а также я использовал фона рабочего для того же самого, но это не работает должным образом, поэтому мне просто нужно знать, есть ли способ, которым я могу использовать индикатор выполнения с SQL Bulk Copy и это говорит мне, что 2000 записей вставлены? Вот мой код:Мне нужен прогрессбар с SQLBulkcopy

public void bulkinsert(string tablename, DataTable dt) 
    { 
     if (con.State == ConnectionState.Closed) 
     { 
      con.Open(); 
     } 
     SqlBulkCopy blkcopy = new SqlBulkCopy(con); 
     blkcopy.DestinationTableName = tablename; 
     blkcopy.BatchSize = dt.Rows.Count; 
     blkcopy.BulkCopyTimeout = 1500; 
     blkcopy.WriteToServer(dt); 
     blkcopy.Close(); 

    } 

Я очень ценю ваши ответы.

+0

Я бы рекомендовал использовать загрузочное колесо в этом случае, может быть, с таймером, что позволяет пользователю знать, что это что-то делать. В противном случае точность индикатора выполнения будет ужасной, и пользователь определенно подумает, что что-то не так, если оно застряло на 99%. <-Microsoft используется для этого alllll время. – FirebladeDan

+0

Используйте свойство NotifyAfter класса SqlBulkCopy, чтобы указать порог уведомления и уловить событие SqlRowsCopied, чтобы обновить вашу панель прогресса. См. Https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy(v=vs.110).aspx – Kevin

ответ

2

Вы должны обрабатывать SqlBulkCopy.SqlRowsCopied событие, которое

происходит каждый раз, когда число строк, указанных в свойстве NotifyAfter были обработаны.

Я хотел бы также использовать Async ОЖИДАНИЕ и использовать Progress<T> вместо фона рабочего

+0

Спасибо! @Conrad Frix .. Это действительно помогает, и мое приложение работает нормально, и теперь я могу видеть, что записи обрабатываются с течением времени. У меня есть небольшой вопрос для вас, который замедляет процесс, когда мы используем уведомление после свойства? –

+0

Ну, вы можете использовать 'System.Diagonistcs.Stopwatch' и протестировать его как с обработкой SqlRowsCopied, так и без него и посмотреть, какая разница. Если есть разница, вы можете спросить своих пользователей, стоит ли иметь индикатор выполнения. –

+0

Да, я проверил с помощью функции «Стоп-вахта» ... это было от 2 до 3 минут задержки в процессе, но я думаю, что это ничтожно, поэтому любым способом спасибо за помощь человек! –