在机房收费这个系统中是没有涉及到数据批量操作这样的功能的,假如用户某天提出了批量添加或修改学生(卡)信息这样的需求,我们应该怎样实现呢?这是个很现实的问题,因为学生的信息在一入学的时候就会保存到一个相应的系统里,如教务系统。但是卡的信息可能是后来才添加的。所以很可能提这样的需求,从教务系统获取一份学生信息的名单,然后对这些学生进行批量建卡操作。

假设批量添加是通过DataGrid实现的,我们需要把DataGrid里面的每一条数据插入到数据库中。

            

怎样使将Excel中的数据存储在hadoop中_事务

方法一:

//循环表格的所有行,逐行插入
        for (int i = 0; i < DataGrid.Rows.Count; i++)
        {
            DataRowView rows = DataGrid[i] as DataRowView;     //取出表格的一行数据
            CardinfoEntity enCardinfo = new CardinfoEntity();  //声明实体
            //给实体赋值
            enCardinfo.Cid = rows["Cid "].toString();
            enCardinfo.Cardtype = rows["Cardtype "].toString();
            enCardinfo.Cstatus = rows["Cstatus "].toString();
            enCardinfo.Redate = rows["Redate "].toString();
            new CardBLL().Insert(enCardinfo);                  //传入一个实体,插入信息       
        }

 

这样操作实现了批量添加的功能,但是仔细看看,假如我们插入了10条信息,这样程序在执行的时候一共走了10次(U<->B<->D)插入信息这条线,当然次数少我们看不出有什么影响,但是当同时插入上千条信息的时候呢?难道让程序再走上千次插入信息这个流程?这样程序的运行效率一下变负值了。并且如果程序采用一些服务如WCF的话,那就同时需要调用上千次WCF服务!假如在插入800条数据的时候程序崩溃了,剩下没插入的数据怎么处理?很显然也不能保证数据的完整性。

在数据量大的时候,这样做肯定是不可取的,怎么去改进呢?既然循环单条插入影响效率,那我们就应该想办法对这一条条的数据进行“打包”,然后再集中处理。

如何打包?这就用到了我们熟悉的List<>泛型集合。

方法二:

//声明一个CardinfoEntity类型的泛型集合
        List<CardinfoEntity> enCardinfoList = new List<CardinfoEntity>();
        for (int i = 0; i < DataGrid.Rows.Count; i++)
        {
            DataRowView rows = DataGrid[i] as DataRowView;     //取出表格的一行数据
            CardinfoEntity enCardinfo = new CardinfoEntity();  //声明实体
            //给实体赋值
            enCardinfo.Cid = rows["Cid "].toString();
            enCardinfo.Cardtype = rows["Cardtype "].toString();
            enCardinfo.Cstatus = rows["Cstatus "].toString();
            enCardinfo.Redate = rows["Redate "].toString();

            enCardinfoList.Add(enCardinfo);                    //将实体添加到集合中
        }
        new CardBLL().Insert(enCardinfoList);                  //将整个集合传入数据层,循环List<>进行添加

 

声明一个List<>把要插入的信息全部添加到该集合中,然后统一传到数据访问层,进行添加操作。这样做程序只走了一遍流程,仅调用了一次WCF服务,提高了运行效率,再加上事务处理,也就很好的保证了数据的完整性。

现在写代码,不再是写出来就行,能实现功能就行。更需要考虑的是怎么让代码更有价值,让程序运行更有效率。