/ / Vložte / aktualizujte riadky v DataTable, VB.NET - sql-server, databáza, vb.net, datatable

Vložte / aktualizujte riadky v DataTable, VB.NET - sql-server, databáza, vb.net, datatable

Mám problémy s časťou kódu, ktorý by mal načítať databázovú tabuľku na TypedTable a vložiť (alebo aktualizovať, ak je už kľúč k dispozícii), v aktualizačnej časti, hoci môj kód beží veľmi pomaly.

Teraz väčšina tabuliek, ktoré spracúvam, si vyžaduje úplné obnovenie, takže údaje vymažem a všetko znova pridám z inej tabuľky v stroji na písanie pomocou jednoduchej tabuľky. AddTableRow(row) postup, ktorý funguje dobre, ale keď potrebujem aktualizovať údaje, používam LoadDataRow(row, fAcceptChanges) funkcie, a to aj s .BeginLoadData() -> .EndLoadData() extrémne pomalý (2/3 aktualizácia za sekundu) s tabuľkou obsahujúcou približne 500 000 riadkov údajov (každý riadok má asi 15 stĺpcov).

Som celkom nový vo vb.net, takže neviem veľa o alternatívach, musím aktualizovať datatable, ale ak niekto vie nejaký spôsob, ako to urýchliť, budem naozaj rád, keď o ňom budem vedieť všetko.

Niektoré ďalšie informácie:

Väčšinou dôvod, pretože vkladám údajeriadok po riadku je ten, že musím skontrolovať obmedzenia pre svoju tabuľku, aby som mohol spracovať výrastky zdvihnuté z vloženej časti, plus automatickú kontrolu obmedzenia TypedDataTable je to celkom dobré, vzhľadom na to, že musím spracovať viac ako 10 db tabuliek.

Môj kód pre aktualizáciu beží takto:

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()

odpovede:

0 pre odpoveď č. 1

Našiel som dobré riešenie môjho konkrétneho problému;pomocou typedtable znamená, že mám väčšiu kontrolu nad obmedzeniami tabuľky, pretože môj zdroj údajov súvisí s tabuľkou DB, takže som vytvoril novú prázdnu typovanú tabuľku na načítanie nových údajov, potom načítam aktuálne údaje z db a Table1.Merge(Table2) zlúčiť údaje.

V mojom prípade je to možné, pretože suma ods údajmi, ktoré nezvládam príliš veľké (okolo 500 000 záznamov), ak sa pamäť stane problémom, myslím si, že realizovateľným riešením môže byť vytvorenie podpornej tabuľky a zlúčenie priamo pomocou SQL, ale nováčik ma tak protirečí, ak m zle tu

Kód toho, čo som urobil:

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