DataReader和DataAdapter的一些比较

【深度学习-番外1】Win10系统搭建VSCode+Anaconda+Pytorch+CUDA深度学习环境和框架全过程 本文将介绍在Windows 10系统下搭建深度学习环境的完整过程,包括安装Anaconda、CUDA、NVIDIA显卡驱动以及Pytorch框架。后续本专栏的Python语言下的深度学习环境都以本篇搭建的为准。 阅读详情

开发时没有很好的了解这块,都是使用Fill模式。

 

使得数据量变大后,系统开始变慢了!

 

于是重新温故了解这方面的东东,希望会对大家有用

 

SqlDataReader是个数据读取器,向前不可后退、每次只读取一条。速度快,现代项目里面用它用得最多。
DataSet是个内存数据库,它与其它两个是根本不一样的。
SqlDataAdapter是个数据适配器,工作于DataSet和数据库之间,负责将数据从数据源读出来放在DataSet中,或将DataSet中的更改更新回数据库。

所以以上可以综合成两种模式:1是SqlDataReader一条一条读(通常这后面会跟有实体转化相关的);2是使用SqlDataAdapter和DataSet。

上面两种方案中,比较如下:
1.性能。DataSet中的数据完全保存在内存中,所以会占用内存。但是通常情况下DataReader读出的数据实例化以后也是在内存中的,所以两者没有多大区别。但是,当数据量极大的情况下,使用DataSet时,不论是你分页还是不分页,它的效率之低,和SqlDataReader相比都是不可同日而语的,尤其是你在分页情况下,使用DataReader可以只读所需数据,网络流量可以很小,但是DataAdapter还是必须全部读出,网络流量你很难优化,除非你自己去深入控制。
2.方便。DataSet数据保存在内存中,可以用Adapter一次性填充,乍看方便不少,其实不然。由于dataset中的数据都是弱类型的,你用的时候不得不大量使用索引、强制类型转换、类型转换来完成读取任务,麻烦而且易错。从这方便来说,在读取数据时那么一点方便是不可取的。
3.离线。DataSet是离线的,数据读取后可以关闭数据库连接,但是DataReader则必须在使用数据的时候一直连接数据库。现在的项目中大多使用实体(Entity)来保存从DataReader中读取的数据,也能实现离线的目的,虽然麻烦一点,但是后期很方便使用。

以上只是简单的比较,其它更多的都不说了。 

 

还查了下ASP.NET 2 里的一些新东西,可以有效地提高效率

使用DataTableReader的一点例子

 

 

DataTableReader reader = dt1.CreateDataReader();
dt2.Load(reader);


最近碰到个小问题,貌似是用dt.load后绑定到gridview,gridview里的checkbox不能选择了- -!

没办法,使用下述方法解决.如果大家有更好的方法请不吝赐教

        public static DataTable GetDTBySql(this string sql,string connString)
        {
            DataTable dt = new DataTable();
            using (SqlConnection conn = new SqlConnection(connString))
            {
                try
                {
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand(sql, conn))
                    {
                        using (SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                        {
                            dt = DataReaderToDataTable(reader);
                            //dt.Load(reader); //使用这中方式得到的dt绑定到view上的话,checkbox不能选中
                        }

                        //SqlDataAdapter da = new SqlDataAdapter(cmd);
                        //da.Fill(dt);
                    }
                }
                catch (SqlException ex) { MessageBox.Show(ex.Message); }
                finally { conn.Close(); }
            }

            return dt;
        }

        private static DataTable DataReaderToDataTable(IDataReader reader)
        {
            DataTable tb = new DataTable();
            DataColumn col;
            DataRow row;
            int i;

            for (i = 0; i < reader.FieldCount; i++)
            {
                col = new DataColumn();
                col.ColumnName = reader.GetName(i);
                col.DataType = reader.GetFieldType(i);
                tb.Columns.Add(col);
            }

            while (reader.Read())
            {
                row = tb.NewRow();
                for (i = 0; i < reader.FieldCount; i++)
                {
                    row[i] = reader[i];
                }
                tb.Rows.Add(row);
            }
            return tb;
        }


NTscan扫描工具 ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。 立即下载

相关推荐

UniApp实现多端支付功能完整实现指南

支付业务流程多端支付实现安全性保障异常处理最佳实践支付基础知识多端支付实现统一支付封装安全性处理异常处理最佳实践根据具体业务场景选择合适的支付方式注重安全性和用户体验做好异常处理和日志记录持续优化和改进支付流程关注我,持续分享前端项目开发经验!

weixin_63454527的博客 2128

OracleDataAdapter 与 OracleDataReader 性能比较

OracleDataAdapter command.Fill(dt);获取DataTable格式数据,380条数据获取时间为3s,59000条数据6s OracleDataReader+  while (reader.Read()),将其中的值用 类接收 ,380条数据时间为0.9s,59000条数据3.7s 单独获取数据的话推荐OracleDataReader,.net+Oracle

qq_32733803的博客 4753

Libero SoC v2021.1离线安装与IP核配置全攻略

本文详细介绍了Libero SoC v2021.1在离线环境下的完整安装与配置流程。核心内容包括如何选择正确的离线安装包、获取并配置许可证、安装与挂载MegaVault IP库,以及将ModelSim仿真器切换至免费SE模式的关键步骤。文章旨在帮助内网开发者避开常见陷阱,顺利完成FPGA开发环境的搭建。

weixin_29279101的博客 408

c# oracle datareader,C#-OracleDataReader的性能不佳

与MS SQL Server相比,我从OracleDataReader对象读取数据时遇到了一些糟糕的性能.它慢了将近10倍,这是不可接受的.以下是两个测试都使用的一些示例测试代码.从OracleDataReader读取数据的最佳方法是什么,是否有比以下所示更好的方法?我很难相信ODP.Net甚至无法与SqlClient相提并论.更新:我已将问题缩小为获取文本字段.由于某种原因,ODP.Net太糟糕...

weixin_40002336的博客 781

《供应链金融风控模型设计:多维度数据整合与动态风险预警机制》

注:方案突出供应链金融「三流合一」(资金流、物流、信息流)的风控逻辑,通过多维度数据整合与动态预警,解决传统风控中中小企业信用评估难、链条风险传导监测滞后的问题。◦ 构建供应链拓扑图,计算「核心企业违约对上下游企业的影响系数」(如某电子厂商违约时,其前五大供应商的风险权重自动提升40%)• 区块链应用:将核心企业应付账款上链存证,防止「一票多融」欺诈(如某供应商用同一应收账款在多家银行融资)◦ 财务数据:核心企业审计报告、上下游企业纳税数据(增值税发票频次/金额)

2501_91651383的博客 1549

【asrpro语音模块+语音控制小风扇】

智能语音控制小风扇,使用ASRPRO语音模块只要一句话就能设置小风扇不同挡位的风力。图形化编程简单有效的控制输出PWM的占空比。

qq_57234300的博客 1万+

C#中DataReader 和DataAdapter的区别

C#中DataReader 和DataAdapter的区别

changhuaiyou的博客 720

沁恒CH32V30X学习笔记02--GPIO的使用教程及2次封装驱动

刚复位后,GPIO 口运行在初始状态,这时大多数 IO 口都是运行在状态所有的 GPIO 口都可以被配置外部中断输入通道,但一个外部中断输入通道最多只能映射到一个GPIO 引脚上,且外部中断通道的序号必须和 GPIO 端口的位号一致,,两方都是一对一的关系。复用功能。

Car12 706

DataReader和DataAdapter的比较

DataReader 1.使用DataReader需要对集合(list)配合使用,封装较为麻烦 2.但对集合作为数据源能够体现更好的面向对象特性 DataAdapter 1.与DataSet配合使用,后台无需单独封装,编写非常简单。 2.但不能更好的体现面向对象编程特性 两者如何选择? 1.开发角度:如果进行并行开发(负责不同层的开发),最好选择DataReader封装方法 2.数据筛选:如何前台...

Maybe_ch的博客 1240

2025年前端框架全景解析:React、Vue、Angular的生态与未来之争

前端框架的竞争本质是工程哲学的分野:React的灵活、Vue的简洁、Angular的严谨,分别对应不同场景需求。

科技D人生 4844

Python爬虫:抓取专利数据并分析专利趋势

本文展示了如何使用 Python 爬虫技术抓取中国专利数据,并对数据进行了清洗、分析和趋势预测。通过分析专利数据,企业和科研机构可以了解行业的技术发展趋势,进行技术创新战略规划。未来,我们可以进一步扩展爬虫的功能,抓取更多专利数据,增加多维度的数据分析,如技术领域、地域分布等。同时,可以尝试使用深度学习模型(如 LSTM)进行时间序列预测,以获得更准确的专利趋势预测。

2201_76125261的博客 1787

MySQL的DataAdapter用法

首先搭建好环境 Net连接MySQL数据库详细步骤(超链接) 我的数据库信息 在环境搭建好的情况下仔细阅读下面代码,基本都是固定格式,需要改的地方很少 using System; using MySql.Data.MySqlClient;//新引入的命名空间 using System.Configuration;//新引入的命名空间 using System.Data; us

CBeann的博客 1万+

瑞芯微RK3588部署YOLOv8模型

写下这篇博客进行记录,以防后面忘了怎么部署。

weixin_45303602的博客 3664

C#实现SQL全库检索数据-比较使用DataReader与DataAdapter+Datatable效率,差距惊人!

C#实现SQL全库检索数据-比较使用DataReader与DataAdapter+Datatable效率,差距惊人! 为了项目的需要,往往需要知道一个值在哪几个表里出现过,进而分析这个程序的执行过程和处理逻辑。我们通常会使用SQL事件跟踪器。这个工具也没少用,但是在使用时经常对所跟踪到的事件太多而感到应接不暇。 于是,我做了一...

weixin_30650039的博客 212

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Axure RP9中继器实现动态分页列表高保真原型全攻略

在后台管理系统的原型设计中,列表与分页是最常见的组合,也是衡量原型可用性的关键。Axure RP9中的中继器(Repeater)提供了一种将数据与展示分离的机制,通过数据集、行模板和筛选条件,实现了真正可交互的动态分页。本文从概念、原理到工程实践,系统讲解如何利用中继器构建高保真原型:包括数据切片公式、页码自动生成、选中态与禁用态管理、以及与搜索联动的注意事项。无论你是产品经理还是交互设计师,掌握这套方法都能让原型更接近真实系统,有效降低与开发的沟通成本。文章还总结了常见踩坑与排查思路,帮助读者快速落地一套

weixin_34234829的博客 212

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

ADO.NET 的最佳实践技巧

ADO.NET 的最佳实践技巧 这是我很早以前看过的微软的一篇文章,最近,一些网友问的问题很多理论都在里面,所以,整理一下放在这里,大家可以参考一下。简介本文为您提供了在 Microsoft ADO.NET 应用程序中实现和获得最佳性能、可伸缩性以及功能的最佳解决方案;同时也讲述了使用 ADO.NET 中可用对象的最佳实践;并提出一些有助于优化 ADO.NET 应用程序设计的建议。

alice_art的专栏 811

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

DataAdapter与DataReader(区别与运用)

DataAdapter是数据访问适配器,适配了数据库和应用程序之间的隔阂。将数据一次加载到内存后便断开与数据库的连接。不适用于大量数据读取,在读取大量数据的过程中,要是出现数据量超越内存容量便会卡死。DataAdapter是DataReader封装而来的。 DataReader用类似于指针的方式读取数据库中的数据,在不取用数据库数据的情况下,Datareader以只进只读的方式读取数据。Da...

胡林的博客 4327

DataSet,DataTable,DataReader,DataAdapter 区别

简介: DataSet:表示一个数据集,是数据在内存中的缓存,可以包括多个表。         DataSet.Table(“表名”).Rows(行号)(“字段名”)   DataTable:表示内存中数据的一个表。DataTable.Rows(行号)(“字段名”)   DataReader:DataReader对象是用来读取数据库的最简单方式,只能读取,不能写入,并且是从头至尾往下读

X_X_OO的博客 2984

DataReader对象读取数据与DataAdapter、DataSet对象操作数据

目录 1、DataReader使用案例: 2、给DataAdapter对象的selectCommand属性赋值 3、综合地使用DataTable、DataColumn和DataRow对象进行数据库操作 4、使用Table名来访问DataTable 5、使用Rows属性访问数据记录 6、使用Rows属性,访问指定行的指定字段 7、综合使用DataRow和DataColumn访问Data...

weixin_38871681的博客 2445

C#中DataAdapter与DataReader的区别和联系

C#中DataAdapter与DataReader的区别和联系 ADO.NET提供以下两个对象,用于检索关系数据并将其存储在内存中:DataSet和DataReader。DataSet提供一个内存中数据的关系表示形式,一整套包括一些表在内的数据(这些表包含数据、对数据进行排序并约束数据),以及表之间的关系。DataReader提供一个来自数据库的快速、仅向前、只读数据流。 当使用...

adong520888的博客 237

.NET ADO.NET中几个重要对象(connection、command、DataAdapter、DataTable和DataSet、Datareader)

一.connection类 1.介绍 Connection 对象主要是开启程序和数据库之间的连结。没有利用连结对象将数据库打开,是无法从数据库中取得数据的。这个物件在ADO.NET 的最底层,我们可以自己产生这个对象,或是由其它的对象自动产生。 2.c#中SQLconnection常用属性 (1)ConnectionString:获取或设置用于打开 SQL Server 数据库的字符串。 (2)C...

qq_43434300的博客 1160

DataSet,DataTable,DataReader,DataAdapter

(哇,今天一打开博客,吓得我一身冷汗都出来了,怎么这么快就14到23了!!嗷嗷!!).net进行数据库操作的时候,难免遇到DataSet,DataReader和DataTable,下面让我们来认识一下:DataSet:表示一个数据集,是数据在内存中的缓存,可以包括多个表。        DataSet.Table(“表名”).Rows(行号)(“字段名”)DataTable:表示内存中数据的一个表。 DataTable.Rows(行号)(“字段名”)DataReader:DataReader对象是用来读取数

姚双双 廊坊师范学院七期信息技术提高班 2555

DataReader和DataAdapter的区别

DataReader是一个向前的指针,本身并不包含数据,调用一次Read()方法它就向前到下一条记录,一个DataReader必须单独占用一个打开的数据库连接!在使用 OleDbDataReader 时,关联的 OleDbConnection 正忙于为 OleDbDataReader 服务,对leDbConnection 无法执行任何其他操作。除非调用 OleDbDataRe...

weixin_34310785的博客 623

DataReader和DataAdapter区分

DataReader是只读向前的,那么后面想检索其中的数据,是不可能的,只能再次DataReader。使用DataReader的好处当然是速度快。而使用DataAdapter 填充DataSet,是完整的一个数据集结构,类似于关系数据库。可以很方便的检索,更新,浏览.特别是需要保留这种状态做进一步处理时,仅用一次DataReader是不可能做到的。 举个简单的例子,如果想从数据库中检索出一批数

winbobob的专栏 1094
上一篇: 导出EXCEL和WORD
下一篇: c# 安装,卸载及如何调试自编写的服务
daone
博客等级 码龄20年 34粉丝 40原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值