首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#读文件存储到数据库,求思路,该怎么处理

2012-05-04 
C#读文件存储到数据库,求思路有一个txt文件 格式如下111117105000000001,111117105000000001991220125700

C#读文件存储到数据库,求思路
有一个txt文件 格式如下
111117105000000001,111117105000000001=99122012570000,686501,0000001
111117105000000002,111117105000000002=99122013110000,118653,0000002
111117105000000003,111117105000000003=99122015150000,484460,0000003
111117105000000004,111117105000000004=99122011310000,437451,0000004
111117105000000005,111117105000000005=99122018500000,627604,0000005
111117105000000006,111117105000000006=99122012430000,029250,0000006
111117105000000007,111117105000000007=99122016070000,334081,0000007
111117105000000008,111117105000000008=99122013850000,564231,0000008
111117105000000009,111117105000000009=99122017340000,751953,0000009
111117105000000010,111117105000000010=99122017420000,108740,0000010
文件最小为6M多,10万行数据
我是这样操作的

C# code
string[] temp = System.IO.File.ReadAllLines(SavePath, System.Text.Encoding.GetEncoding("gb2312"));IDictionary<bool, ArrayList> dict = BusiNeobyCardImportBiz.ImportCard(temp);public IDictionary<bool, ArrayList> ImportCard(string[] ListCard)        {            int Success = 0;//成功次数            int Failure = 0;//失败次数            IDictionary<bool, ArrayList> results = new Dictionary<bool, ArrayList>();            ArrayList arraylist = new ArrayList();            for (int i = 0; i < ListCard.Length; i++)            {                if (string.IsNullOrEmpty(ListCard[i]))                {                    continue;                }                string[] cardNote = ListCard[i].Split(',');                if (cardNote.Length != 4||cardNote[0].Length!=18)                {                    Failure++;                    arraylist.Add(ListCard[i]);                    continue;                }                if (this.Find(ExpEnter.Equal("CardNo", cardNote[0]), null).Count >= 1)                {                    Success++;                    continue;                }                BusiNeobyCardImport BusiNeobyCardImportModel = new BusiNeobyCardImport();                BusiNeobyCardImportModel.CardNo = cardNote[0];                BusiNeobyCardImportModel.Note1 = cardNote[0];                BusiNeobyCardImportModel.Note2 = cardNote[2];                BusiNeobyCardImportModel.Note3 = cardNote[3];                BusiNeobyCardImportModel.Status = "N";                OpResult result = BusiNeobyCardImportDal.Add(BusiNeobyCardImportModel);//添加到数据库                if (result.Success)                {                    Success++;                }                else                {                    Failure++;                    arraylist.Add(ListCard[i]);                }            }            ArrayList listsuccess = new ArrayList();            listsuccess.Add(Success);            results.Add(false, arraylist);            results.Add(true, listsuccess);            return results;        }

如果文件过大,总不能全部放到内存处理。
我想逐行读取,然后操作。
想请问下有没有更好的思路

[解决办法]
既然你要写入数据库,那么为何不直接读取上来存到DataTable中?6M的文件全部读到内存应该也没什么问题,200M以下都不会有太大问题,超过200M可以考虑逐行读取,

[解决办法]
用读文件类一次只读一行.处理完后,存入数据库中.看看System.IO.File名称空间下的FIleRead类.好像是.有点记不得了
[解决办法]
探讨

引用:
既然你要写入数据库,那么为何不直接读取上来存到DataTable中?6M的文件全部读到内存应该也没什么问题,200M以下都不会有太大问题,超过200M可以考虑逐行读取,

存到DataTable用SqlBulkCopy实现速度应该会快很多
我正打算用SqlBulkCopy试下要多少时间。

[解决办法]
如果实在觉得太大的话,可以分开一批一批的读取插入行不?
[解决办法]
1W行,1秒中
------解决方案--------------------


是的,如果担心文件太大,可以一次读20万行并写入数据库,
[解决办法]
从大家的回帖,我相信你已经感觉到思路了。如果一行一行太慢,而一次性全部读过来太占内存的话,可以一部分一部分的读。至于这个部分是多少,就看你怎么在时间和内存之间平衡了。

热点排行