读取一个txt档,然后将数据插入sql server,执行的时候报内存溢出,有时候提示连接已关闭

问题描述

用的是批插的方式sqlBC.WriteToServer(dt);之前数据量不是太大,三四十万笔,速度还行,三四十秒现在数据量变得很大,txt档150M左右,数据近100W,//事务处理插入数据库中publicvoidExesql(){//调用方法TxtFileToStr()stringstr=TxtFileToStr();string[]sql=str.Split(',');//得到string数组intnum=sql.Length-1;一次事务处理直接内存溢出,请问如何分批处理呢?求人指导,程式已经执行不成功了,现在都我手动在处理,头大了.//读出文本的内容privatestringTxtFileToStr(){stringFilePath=System.Configuration.ConfigurationSettings.AppSettings["FilePath"];//得到文本路径Console.WriteLine(FilePath);FileInfofile=newFileInfo(FilePath);FileStreamfs=file.OpenRead();StreamReadersr=newStreamReader(fs,System.Text.Encoding.GetEncoding("utf-8"));sr.BaseStream.Seek(0,SeekOrigin.Begin);stringstr=sr.ReadToEnd();fs.Close();sr.Close();returnstr;}

解决方案

解决方案二:
能确定内存溢出发生在哪吗?sqlBC.WriteToServer(dt);我猜想你是把数据一次读取,然后构造了一个datatable,对吧?
解决方案三:
估计stringstr=sr.ReadToEnd();这里都受不了分段读取试试
解决方案四:
http://bbs.csdn.net/topics/340168938
解决方案五:
Seek的时候分段读
解决方案六:
可能出的问题原因1:每个数值类型的值都是有上限的,从你写的程序上看你应该是将文本的内容全部一次性读去了,可能超了string,string[]或,int中某项的内存分配的上限了可能出的问题原因2:数据量太大,内存资源回收不够及时,新数据持续写入导致的溢出解决办法(仅供参考)1,换个更大数值类型2,分批次读取3,每次往数据库中插入完一条数据后,写个方法,让程序立刻把这部分在内存中已经没用的数据(内存应该还没释放),回收掉,释放内存
解决方案七:
大量的数据可能要分段处理,
解决方案八:
引用1楼lostuser的回复:

能确定内存溢出发生在哪吗?sqlBC.WriteToServer(dt);我猜想你是把数据一次读取,然后构造了一个datatable,对吧?

是的.
解决方案九:
每100行操作,使用文件指针

时间: 2025-01-31 02:10:09

读取一个txt档,然后将数据插入sql server,执行的时候报内存溢出,有时候提示连接已关闭的相关文章

将DataTable 数据插入 SQL SERVER 数据库

原文:将DataTable 数据插入 SQL SERVER 数据库 以下提供3中方式将DataTable中的数据插入到SQL SERVER 数据库: 一:使用sqlcommand.executenonquery()方法插入 foreach (DataRow datarow in datatable.Rows) { string sql = "INSERT INTO [Table_1] ([CompanyName],[CompanyCode],[Address],[Owner],[Memo])&q

如何在java中实现读取一个txt文档中的随机一行

问题描述 如何在java中实现读取一个txt文档中的随机一行 如题,如何在java中实现读取一个txt文档中的随机一行? 主要就是怎么随机读取 解决方案 根据楼上的说法,来总结一下吧,总体来说,就是将文件全部都读取出来,每一行存储到一个数组或集合中,然后再通过产生随机数,来对这个数组或是 集合进行随机的访问.这样一来就解决了 解决方案二: 文本文件只能顺序读,不能随机读.你的需求只能是读取文本文件每一行到一个arraylist,然后得到下标范围,产生一个随机数,取那一行 解决方案三: http:

vb 读取word文档中的数据和图片

问题描述 vb 读取word文档中的数据和图片 http://bbs.csdn.net/topics/390528303?page=1 我遇到了和该帖同样的问题: 需要将一个doc文档中 按特定字符分割后提取出内容 内容不只有字符还有图 比如: /xxxxxxxxxxx[图片1]xxxx/ /xxxxxxxxxxxxxxxx[图片2]xxxxxxxxxxxxxxxx/xxxxxxx[图片3]/ 请大家给点建议 尽量详细 解决方案 建议通过ole连接word,然后你直接用VBA函数来实现,查找指定

java io读取一个txt中带指定关键字的某行。

问题描述 java io读取一个txt中带指定关键字的某行. 楼主大一,Java小白,课程设计遇到的问题,用io流读取txt中的数据,查询时输入身份证号,要求显示出这个身份证号所在的这一行信息,这个要怎么做呢? 解决方案 可以使用BuffferedReader来读取文件,并一行一行的比较,如果该行包含这个身份证号,就返回该行的信息即可.比如你的txt为D:data.txt public static void main(String[] args) { String idNum = ""

新手 请求帮忙解答-请问下,如何用Java读取 一个txt文件(txt文件是一个数字矩阵)``````

问题描述 请问下,如何用Java读取 一个txt文件(txt文件是一个数字矩阵)`````` 请问下,如何用Java读取 一个txt文件(txt文件是一个数字矩阵).把每列的数据合成一大列输出,意思就是把第二列的数据放在第一列的末尾,第三列放在第二列的末尾````` 多谢了. 解决方案 太麻烦 说下思路,你看一下行不行, 1>.把每一行都放到一个数组里 ,可以用缓冲流读取一行, 2>.然后按矩阵的分割部分的字符 来分割这一行的字符串 拿到每个数组项, 3>.根据每个数组的下标,可以拿到

c++读取csv文件并赋值-如何通过c ++读取一个csv文件并将数据赋值给两个一位数组?

问题描述 如何通过c ++读取一个csv文件并将数据赋值给两个一位数组? 0 912.43 1.24 912.42 1.54 901.92 21.94 883.97 24.17 881.51 29.94 876.45 37.4 870.57 49.62 861.14 59.06 853.05 75.99 843.75 90.84 833.95 118.8 818.25 135.2 804.9 152.35 791.55 157.68 791.15 174.6 770.35 190.92 766.

activex控件练习,实现在网页上读取一个文档中的内容但是无法实现

问题描述 activex控件练习,实现在网页上读取一个文档中的内容但是无法实现 char CTest_01Ctrl::Readfile(char* pathname) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // TODO: Add your dispatch handler code herechar a[100]; char a[100]; char str; //char s[80]; int i=0; ifstream infile;

.net-.NET 怎么写一个事物使更新集合数据到SQL数据库时有一个报错所有数据都不更新

问题描述 .NET 怎么写一个事物使更新集合数据到SQL数据库时有一个报错所有数据都不更新 需要.NET 写一个事物在更新集合数据(即多条数据)到SQL数据库时其中有一个报错则所有数据都不更新. 方法如下,事物代码我应该怎么写 public void UpdateCollection(RequirementsPlanningCollection datas) { foreach (var RequirementsPlanning in datas) { Update(RequirementsPl

极限挑战—C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)

原文:极限挑战-C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)     实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本实验将使用5中方法完成这个过程,并详细记录各种方法所耗费的时间.     本实验中所用到工具为VS2008和SQL SERVER 2000.SQL SERVER 2008,分别使用5中方法将100万条数据导入SQL 2000与SQL 2008中,实验环境是DELL 2850双2.0GCPU,2G内存的服务器.感兴趣的朋友可以下载源代码自己