簡體   English   中英

使用 C# 將大型 CSV 文件插入 SQL 表中以進行導入和操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM