Пишу приложение, которое при работе создает в БД (адресную) таблицу и заполняет ее данными. Процесс заполнения данными(30-40 тысяч строк) таблицы очень длительный. Соответственно в это время программа не реагирует, а с использованием CPU на 99% трудиться "в поте лица". Надо дать возможность пользователю выполнять еще какие либо действия с программой. Для этого нужно использовать BackgroundWorker.
Нужно поместить в него одну процедуру. Но она не возвращает никакого значения, а построчно заполняет данными таблицу в БД из таблицы ДатаСета.
В поиске был.
В MSDN смотрел.
приведенные здесь примеры работают с функциями, которые возвращают значение. А как быть в моём случае?
- Код: Выделить всё
Private Sub InsertInto()
Dim sql As String = "INSERT INTO " & tableName & "(RowId"
For Each adComp In comps
sql &= ", " & adComp.NamePost
Next
sql &= ") VALUES (?"
For Each adComp In comps
sql &= ", ?"
Next
sql &= ");"
For Each dr As DataRow In db.myDs.Tables(tableName).Rows
db.AddSqlParameter("RowId", dr("RowId"))
For Each adComp In comps
db.AddSqlParameter(adComp.NamePost, dr(adComp.NamePost))
Next
db.DoNonQuery(sql)
db.ClearSqlParametrs()
Next
End Sub
Процедура выполняет генерацию sql- команды в зависимости сколько и каких компонентов адреса нужно добавить в таблицу. Потом в цикле считывает значения строк в таблице ДС, добавляет параметр для sql команды и выполняет ее. db и adComp экземпляры классов, comps коллекция классов adComp.
Ни как не соображу КАК поместить эту процедуру в BackgroundWorker?