[英]Insert Large CSV file into SQL table using C# for import and manipulation
尋找有關我正在處理的 C#/SQL 項目的幫助。
我有一個 csv 文件,間隔約為 1400 萬。 這是 header 和示例行
文件 1 - F1
SENSORID,EXTSENSORID,讀數,VAL
964543,"987654",20220101000000,.03
還有另一個 csv 文件,其中包含 987654 的位置詳細信息
文件 2 - F2
EXTSENSORID、LOCSERV、STARTDATE、FINALDATE、MULT1、MULT2
987654, 000053448E000, 2021-12-01, 2200-01-01, 200, 200
最終的 csv 文件包含與位置相關的客戶數據
文件 3 - F3
LOCSERV,STARTDATE,FINALDATE,CID,RATE
000053448E000, 2021-12-01, 2200-01-01, 123456, ER
這些文件需要用於使用以下標題填充 sql 表:
標頭:EXTSENSORID、UTCDateTime、Value、LocalDateTime、LOCSERV、CID、Rate、MULT1、MULT2
EXTENSORID - F1[EXTENSORID]
UTCDateTime - F1[READTS] - 這需要一些操作才能轉換為 DateTime
值 - F1[VAL] * F2[MULT1] - F1[EXTSENSORID] 與 F2[EXTSENSORID] 相關
LocalDateTime - F1[READTS].ToLocalTime
LOCSERV - F2[LOCSERV] - F1[EXTSENSORID] 是關於 F2[EXTSENSORID]
CID- F3[CID] - F2[EXTSENSORID] 與 F3[EXTSENSORID] 有關
RATE- F3[RATE] - F2[EXTSENSORID] 與 F3[EXTSENSORID] 有關
MULT1- F2[MULT1] - F1[EXTSENSORID] 與 F2[EXTSENSORID] 相關
MULT2- F2[MULT2] - F1[EXTSENSORID] 與 F2[EXTSENSORID] 有關
現在,我正在使用 StreamReader 將 F1 中的每一行放入一個數組中。 我為 F2 和 F3 創建了一個列表。 使用 linq,我從 list_F2 和 list_F3 中查找必要的參數。 利用 list_F2 和 list_F3 中的數組和參數,我創建了一個 NewRow(),然后將 NewRow() 添加到數據表中。 然后我將數據表批量插入到 SQL 表中。
批量插入需要 2 分鍾。 但是,以這種方式填充數據表需要幾個小時。
任何想法都會有所幫助。 謝謝。
您需要SqlBulkCopy
class。
我有類似的東西來處理大型(並且經常被客戶誘捕)CSV 文件。 StreamReader
的子類解析記錄和字段。 我掃描文件一次以猜測列類型並編寫表定義,然后創建表並設置SqlBulkCopy
。 然后對文件進行第二次掃描,將字段值解析為已識別的數據類型,並將批次發送到SqlBulkCopy
。 在將行添加到下一個SqlBulkCopy
時,使用線程將一批發送到數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.