[英]Is it possible to insert an entire VB.NET DataTable into a SQL Server at once
[英]Insert/Update rows in a DataTable, VB.NET
我遇到了一段代碼,它應該在TypedTable上加載數據庫表並在更新部分插入(或更新,如果密鑰已經存在),盡管我的代碼運行速度非常慢。
現在,我處理的大多數表需要完全刷新,所以我擦除數據並使用簡單的AddTableRow(row)
過程重新添加typedtable中另一個表的所有內容,該過程工作正常,但是當我需要更新數據時我使用LoadDataRow(row, fAcceptChanges)
函數,即使使用.BeginLoadData() -> .EndLoadData()
它.BeginLoadData() -> .EndLoadData()
變得非常慢(每秒2/3更新),其中一個表包含大約500k行數據(每行都有像15 cols)。
我對vb.net很新,所以我不太了解我必須更新數據表的替代方案,但如果有人知道任何加速它的方法,我會很高興聽到一切。
更多信息:
因為我逐行插入數據的原因主要是因為我需要檢查我的表的約束,所以我可以處理從插入部分引發的exeptions,加上TypedDataTable
的自動約束檢查它非常好,考慮到我有處理超過10個db表。
我的更新代碼就像這個atm一樣運行:
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()
我找到了解決我特定問題的好方法; 使用typedtable意味着我對表約束有更多的控制權,因為我的數據源與DB表有關,所以我創建了一個新的空類型表來加載新數據,然后我從db和Table1.Merge(Table2)
加載當前數據Table1.Merge(Table2)
以合並數據。
在我的情況下這是可能的,因為我處理的數據量不是太大(大約500k記錄),如果內存成為問題我認為一個可行的解決方案可以創建一個支持表並直接使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.