我要从一个文本中提取数据,然后将数据存入到SQLSERVER数据库中去。
我现在采用的一行一行的读,先读出一行文本的内容出来,然后对此行文本进行数据提取后写入到数据库中去。
源文本格式为:
GYBSC0111401|1NM_ShengShiHuaChen|460-00-34055-13931|2008-05-20 08:00|1|0|323|41172|6242|0|103|0|18|4|0|0|34|0|149|87|1|0|10|10|0|0|0|50|0|0|0|0|0|0|0|0|35|0|0|0|35|35|148|0|148|0|147|0|0|1|182|0|0|0|0.000000000000000e+00|0|0.000000000000000e+00|48579|5179|12|1.1971061229705811|0|321|0|8|8.0|0.35236749053001404|323|8|0|0|242|0|6|6.0|1.2201223373413086|0|315|180|0|2|178|48579|1|2|2|175|取出的样式为:
GYBSC0111401
1NM_ShengShiHuaChen
460-00-34055-13931
2008-05-20 08:00
…………
也就是将“|”前的内容分别读出来然后写入到数据库中去。每个“|”前对应的就是一个列的数据。
我现在也做出来的,但读5929个上面样式的数据并写到数据库中要用1个小时的时间,如何能减少所需的时间。
除了用是上面的办法外还有其它的办法没有?
只要能提供算法就行,能有源代码最好。谢谢。

解决方案 »

  1.   

    一般做法就是一次性读入一个STRING变亮,用SPLIT按照|来分割到一个数组里,然后将数组内容依次导入数据库.
    我不知道你用的是否就是这种做法.如果只是文件尺寸比较大,而要处理的文件数量并不多的话,一次性读入内存,在数组里操作会占用很大资源造成性能下降,可以考虑先手动把文件切割成几个小文件,再一个一个导,当然,也可以自己写一个专门的预处理程序专门用来分割文件.
      

  2.   

    我也来凑个热闹.文件大小小于50M:一次性读入内存,在内存里处理.以目前一般硬盘的速度,读入时间不会高于五秒;至于在内存里如何处理,看你的代码怎么写的了.大于50M的话:写代码进行二进制读写,根据具体要求优化.比如这个例子,快速删除文本文件包含指定内容的行:http://topic.csdn.net/u/20080216/15/7a4e4f63-6c0f-4025-b2bc-a95c5c9d396e.html文件大小为68M到82M左右.从我的垃圾代码的32分钟"记录"到XMXOXO的4.5秒......参考一下思路吧.
      

  3.   

    你的txt文件完全可以当作数据库来读入(如下),只要在 schema.ini 定义好,是用字符 ¦ 进行分割的。
    http://www.connectionstrings.com/?carrier=textfile其实无论用何种方法读,都不会很慢的,估计更新数据库的程序没写好。
      

  4.   

    现在搞定了,谢谢大家.
    我现在是用了一个临时表来解决这个问题的了.使用bulk insert将文本内容导入到表中然后在出临时表取出写到数据表中去.
    速度很快一个100多M的文本也只要不到30秒就搞定了.