有一个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万行数据
我是这样操作的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;
        }如果文件过大,总不能全部放到内存处理。
我想逐行读取,然后操作。
想请问下有没有更好的思路

解决方案 »

  1.   

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

  2.   

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

  3.   

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

  4.   

    SqlBulkCopy  使用它  我用它添加过1亿条数据
      

  5.   

    将数据放于DataTable中,然后用SqlBulkCopy添加到数据库中  vs2010 + sql2008
      

  6.   

    我操作的文件有2.9G 将它添加到数据库,文件读取用内存映射+SqlBulkCopy添加到数据库
      

  7.   

    非常感谢楼上各位仁兄=。=
    我试了下还是用SqlBulkCopy比较快=。=
    先结贴吧