使用C#将大型CSV文件插入SQL表中进行导入和操作



正在寻找有关我正在处理的C#/SQL项目的一些帮助。

我有一个大约1400万间隔的csv文件。这是一个标题和一个样本行

文件1-F1

感觉,外感觉,READTS,VAL

964543;987654〃;,20220101000000,.03

还有另一个csv文件,其中包含987654 的位置详细信息

文件2-F2

EXTSENSORID,LOCSERV,STARTDATE,FINALDATE,MULT1,MULT2

987654000053448e0002021-12-012001-01200200

最终csv文件包括与位置相关的客户数据

文件3-F3

LOCSERV,起始日期,最终日期,CID,速率

000053448e0002021-12-01 2200-01-0123456,ER

这些文件需要用于用以下标题填充sql表:

标头:EXTSENSORD、UTCDateTime、Value、LocalDateTime、LOCSERV、CID、Rate、MULT1、MULT2

外感觉神经-F1[伸肌]

UTCDateTime-F1[READTS]-这需要一些操作才能转换为DateTime

值-F1[VAL]*F2[MULT1]-F1[EEXTSENSORD]与F2[EXTSENSORD]相关

LocalDateTime-F1[READTS].ToLocalTime

LOCSERV-F2[LOCSERV]-F1[EXTSENSORD]与F2[EXTSENsorD]相关

CID-F3[CID]-F2[EXTSENSORD]与F3[EXTSENsorD]有关

RATE-F3[RATE]-F2[EXTSENSORD]与F3[EXTSENsorD]相关

MULT1-F2[MULT1]-F1[EEXTSENSORD]与F2[EXTSENSORD]相关

MULT2-F2[MULT2]-F1[EXTSENSORD]与F2[EXTSENsorD]相关

现在,我正在使用StreamReader将F1中的每一行放入一个数组中。我为F2&F3。使用linq,我从list_F2&list_F3。利用来自list_F2&list_F3,我创建了一个NewRow((,然后将该NewRow添加到数据表中。然后,我将数据表扩充到SQL表中。

大容量插入需要2分钟。但是,以这种方式填充数据表需要数小时。

任何想法都会有所帮助。谢谢

您需要SqlBulkCopy类。

我有一些类似的东西来处理大的(经常被客户篡改的(CSV文件。StreamReader的子类解析记录和字段。我扫描该文件一次以猜测列类型并编写表定义,然后创建表并设置SqlBulkCopy。文件的第二次扫描然后将字段值解析为所识别的数据类型,并向SqlBulkCopy发送批。在向下一个SqlBulkCopy添加行时,使用线程向数据库发送一个批。

最新更新