数据的集中处理 List<T> 的使用

在机房收费这个系统中是没有涉及到数据批量操作这样的功能的,假如用户某天提出了批量添加或修改学生(卡)信息这样的需求,我们应该怎样实现呢?

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

方法一:

        //循环表格的所有行,逐行插入
        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服务,提高了运行效率,再加上事务处理,也就很好的保证了数据的完整性。

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

oノo════════════════════════════╲

│ヽ.学无止境, 分享至上。                                   │

│   出自:  http://blog.csdn.net/u010028869     .ヽ│

╲═════════════════════════════ヾ

时间: 2024-10-18 06:29:52

数据的集中处理 List<T> 的使用的相关文章

记一次MySQL找回用户数据

事情经过 有天,我们公司外区的一个销售C说他8月3号以前的工作流记录找不到了.问清缘由,原来是更新了微信号(我们公司的工作流是基于企业微信开发的).经过分析,微信号和流程数据并没什么关系,所以初步得出结论:本来只需要更新微信号的,结果我们公司的流程系统管理员把用户先删除,再创建了新的用户. 解决过程 1.首先想到的是直接从定时备份数据里面找回原来的用户ID,结果发现系统只备份了十天的记录,而工作流系统上显示销售C只有8月3号以后的流程记录,距今已经40多天,从自动备份的数据里已经无法恢复. 2.

使用 Chrome 浏览器插件 Web Scraper 10分钟轻松实现网页数据的爬取

本文标签: WebScraper Chrome浏览器插件 网页数据的爬取 使用Chrome 浏览器插件 Web Scraper 可以轻松实现网页数据的爬取,不写代码,鼠标操作,点哪爬哪,还不用考虑爬虫中的登陆.验证码.异步加载等复杂问题. Web Scraper插件 Web Scraper 官网中的简介: Web Scraper Extension (Free!)Using our extension you can create a plan (sitemap) how a web site

Day4 - 迭代器&amp;生成器、装饰器、Json &amp; pickle 数据序列化、软件目录结构规范

---恢复内容开始--- 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 需求:列表a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求把列表里的每个值加1 1 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2 b = [] 3 for i in a: 4 b.append(i+1) 5 a = b 6 print(a) 普通青

Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步

摘自:http://blog.csdn.net/javaee_sunny/article/details/53439980 目录(?)[-] Oracle 10g 物化视图语法如下 实例演示 主要步骤 在A节点创建原表和物化视图日志 在B节点创建连接A节点的远程链接 在B节点处创建目标表和与目标表名称相同的物化视图 在B节点处刷新物化视图 升级采用存储过程定时任务JOB方式定时刷新物化视图 进一步优化 文章更新记录 参考文章 Oracle 10g 物化视图语法如下: create materia

MySQL(九)之数据表的查询详解(SELECT语法)二

上一篇讲了比较简单的单表查询以及MySQL的组函数,这一篇给大家分享一点比较难得知识了,关于多表查询,子查询,左连接,外连接等等.希望大家能都得到帮助! 在开始之前因为要多表查询,所以搭建好环境: 1)创建数据表suppliers 前面已经有一张表是book表,我们在建立一张suppliers(供应商)表和前面的book表对应. 也就是说 让book中s_id字段值指向suppliers的主键值,创建一个外键约束关系. 其实这里并没有达到真正的外键约束关系,只是模拟,让fruits中的s_id中

C#如何拿到从http上返回JSON数据?

在实际开发中,我们经常会使用到API,所谓API一般就是一个地址,我们称之为接口.然后我们通过用C#对这地址发送请求,请求后,服务器就会给我们返回数据,一般是XML或者JSON,这里我们主要讲述的是JSON. 为了演示,我们这里准备了一个接口,这是一个查询物流的接口.(读者读到这篇文章的时候,接口可能有效,也可能失效,因为接口是网上找的,不是笔者自己写的,但是原理是一样的.) 接口:  http://www.kuaidi100.com/query?type=快递公司编码&postid=物流单号

C#中导出数据到Excel表格中

之前PM交给我一个自动化测试的Case,让我抓取页面上的数据到Excel表格中,刚好又接了一个之前人家做的系统, 刚好看到可以用NPOI导数据,就动手试试,成功导出. 由于鄙人比较菜,也比较懒, 怕自己忘记了,今天就总结一下,以防下次用可以参考. 1.要使用NPOI,首先需要在Project中Install NPOI的 Package. 右键点击Project------>Manage NuGet Packages---->Search NPOI----->点击搜索到的NPOI然后点击等

Oracle in 查询数据

问题描述: 查询所有的数据,查询结果:146360 select count(1) from bank_cde; in查询的获取部分数据,查询结果 :73080 select count(1) from bank_cde t where t.belongcode2 in('ABC','BCOM','BOC','CCB','CEB','CGB','CIB','CITIC','CMBC','ICBC','PAB','POST','SPDB'); not in查询数据,结果为0 select coun

SQL基础:数据表的创建

1. 先选择创建表所在的数据库 2. 创建表 3. 查看表是否创建成功 4. 主键:要求主键列的数据唯一,且不允许为空.主键能够唯一的标识表中的每一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度. 主键分为:单字段主键和多字段联合主键. 4.1 单字段主键 4.1.1 定义方式一:在定义列的同时指定主键 4.1.2 定义方式二:在定义完所有的列之后指定主键 4.2 多字段联合主键 5. 使用外键约束 外键用来在两个表之间建立连接,可以是一列或多列.一个表的外键可以是

MySQL binlog日志恢复数据

我们了解了MySQL 的 binlog 日志的开启方式以及 binlog 日志的一些原理和常用操作,我们知道,binlog 有两大作用,一个是使用 binlog 恢复数据,另一个就是用来做主从复制.本篇笔记就是来记录如何使用 binlog 日志来做数据恢复.当然了,使用 binlog 日志所恢复的数据只能是部分数据,并不能够使用 binlog 日志来做数据库的备份,如果想要做数据库备份,依然要使用我们传统的备份方法,而 binlog 可以作为增量备份. 视频链接:http://www.ronco