/ / Вставка / оновлення рядків у DataTable, VB.NET - sql-сервер, база даних, vb.net, даних

Вставка / оновлення рядків у DataTable, VB.NET - sql-сервер, база даних, vb.net, даних

У мене виникають проблеми з фрагментом коду, який повинен завантажити таблицю бази даних на TypedTable і вставити (або оновити, якщо ключ вже присутній), в частині оновлення, хоча мій код працює надзвичайно повільно.

Тепер більшість таблиць, з якими я оброблюю, потребує повного оновлення, тому я стираю дані та повторно додаю все з іншої таблиці в набраній таблиці за допомогою простого AddTableRow(row) процедура, яка працює просто чудово, але коли мені потрібно оновити дані, я використовую LoadDataRow(row, fAcceptChanges) функції, і навіть з .BeginLoadData() -> .EndLoadData() він стає надзвичайно повільним (2/3 оновлення в секунду) з Таблицею, що містить близько 500 к рядків даних (кожен рядок містить 15 колодок).

Я "досить новий на vb.net, тому я не знаю багато про альтернативи, мені доведеться оновити дані, але якщо хтось знає який-небудь спосіб її прискорити, я буду дуже радий почути все про це".

Деякі додаткові відомості:

Здебільшого причина тому, що я вставляю данірядок за рядком, тому що мені потрібно перевірити обмеження для моєї таблиці, щоб я міг обробляти exepep, підняті з частини вставки, плюс автоматичну перевірку обмежень для TypedDataTable це досить добре, враховуючи, що я маю обробляти більше 10 db таблиць.

Мій код для оновлення працює так, як цей атм:

Table = Parser.GetData()
TypedTable = TableAdapter.GetData()

For Each row In Table
Try
Dim TypedRow = TypedTable.NewRow()
LoadNotTypedIntoTyped(row, TypedRow)
TypedTable.BeginLoadData()
TypedTable.LoadDataRow(TypedRow.ItemArray, True) "TODO speed up this
TypedTable.EndLoadData()
Catch ex As Exception
"Generic exception handling here
End Try
Next

SqlBulkCopyLoadProcedure()

Відповіді:

0 для відповіді № 1

Я знайшов вдале рішення своєї конкретної проблеми;за допомогою введеного типу означає, що я маю більше контролю над обмеженнями таблиці, оскільки мій джерело даних пов'язаний з таблицею БД, тому я створив нову порожню введену таблицю для завантаження нових даних, потім завантажую поточні дані з db і Table1.Merge(Table2) об'єднати дані.

У моєму випадку це можливо, оскільки сума одДані, з якими я обробляюсь, не надто великі (близько 500 тис. записів), якщо пам'ять стає проблемою, я думаю, що життєздатним рішенням може бути створення таблиці підтримки та об'єднання безпосередньо за допомогою SQL, але я "новачок DB, тому мені суперечать, якщо я" м тут не так

Код того, що я зробив:

Dim SupportTable As TypedTable = MyTypedTable.Clone()
For each row in TableToLoad
Dim NewTypedRow = SupportTable.NewRow()
For Each col In Columns
"Load every column
Next
SupportTable.AddTypedRow(NewTypedRow)
Next
TypedTable.Merge(SupportTable)
TypedTable.AcceptChanges()
"Load to database