社区
C#
帖子详情
读select语句时用DataReader一个个的读好呢,还是DataAdapter的fill方法好呢?
mqmmx
2005-11-22 11:44:23
如我有一个select语句返回查询结果时是直接用DataAdapter的fill方法填入好呢,还是用Command方法的ExecuteReader,然后根据reader的表结构建表,加入数据。
以上两个方法哪个好些呢?我特指的是一些数据量较大的查询?
可以的话请各位说说两个方法的好处
...全文
271
13
打赏
收藏
读select语句时用DataReader一个个的读好呢,还是DataAdapter的fill方法好呢?
如我有一个select语句返回查询结果时是直接用DataAdapter的fill方法填入好呢,还是用Command方法的ExecuteReader,然后根据reader的表结构建表,加入数据。 以上两个方法哪个好些呢?我特指的是一些数据量较大的查询? 可以的话请各位说说两个方法的好处
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xxuu503
2005-11-22
打赏
举报
回复
fill简单
q_po_o
2005-11-22
打赏
举报
回复
只是读一次数据显示(不再操纵数据)用DataReader,数度快,节约资源
否则用DataAdapter的fill
salsfy
2005-11-22
打赏
举报
回复
datareader是独占方式读,如果需要同时读取数据最好不用。
jujuxys
2005-11-22
打赏
举报
回复
DataReader是只进、只读的,所以它的优点是读取速度快,应用于通常的无结构信息数据的读取,它是一个轻量级的数据访问,缺点是一个DataReader必须依赖于一个Connection;DataAdapter的优点在于可以fill带有结构描述信息的DataSet,同时不依赖于一个Connection,是重量级的访问。如果你要从Reader中读取数据填充表,显然是fill比较合适,因为在1.1框架中的DataTable是没有索引结构的,插入操作消耗会比较大。
Qqwwee_Com
2005-11-22
打赏
举报
回复
速度最快是是datareader 最方便的是dataset
批量读取数据最快的代码如下,比直接fill快15%-30%
/// <summary>
/// GetList:批量获取列表
/// </summary>
/// <returns>ArrayList 比dataset更快的方式。</returns>
public System.Collections.ArrayList GetList(){
string StrSql ="Select 产品ID,产品名称,单价,单位数量,订购量,供应商ID,库存量,类别ID,再订购量,中止 FROM 产品";
OleDbDataReader dr = this.CreateOleDbDataReader(StrSql);
entity_产品 Myentity;
Myentity=null;
System.Collections.ArrayList ResultList;
ResultList = new System.Collections.ArrayList();
int[] FieldIndexs=new int[10];
bool IndexInited = false;
while (dr.Read()){
if (!IndexInited) {
FieldIndexs[0] = dr.GetOrdinal("产品ID");
FieldIndexs[1] = dr.GetOrdinal("产品名称");
FieldIndexs[2] = dr.GetOrdinal("单价");
FieldIndexs[3] = dr.GetOrdinal("单位数量");
FieldIndexs[4] = dr.GetOrdinal("订购量");
FieldIndexs[5] = dr.GetOrdinal("供应商ID");
FieldIndexs[6] = dr.GetOrdinal("库存量");
FieldIndexs[7] = dr.GetOrdinal("类别ID");
FieldIndexs[8] = dr.GetOrdinal("再订购量");
FieldIndexs[9] = dr.GetOrdinal("中止");
IndexInited = true;
}
Myentity = new entity_产品();
if (dr.IsDBNull(FieldIndexs[0])) {
Myentity.产品ID ="";}//字符类型,默认为 空字符
else{
Myentity.产品ID = dr.GetInt32(FieldIndexs[0]);
}
if (dr.IsDBNull(FieldIndexs[1])) {
Myentity.产品名称 =null;}//其他 默认为 null
else{
Myentity.产品名称 = dr.GetString(FieldIndexs[1]);
}
if (dr.IsDBNull(FieldIndexs[2])) {
Myentity.单价 =null;}//其他 默认为 null
else{
Myentity.单价 = dr.GetDecimal(FieldIndexs[2]);
}
if (dr.IsDBNull(FieldIndexs[3])) {
Myentity.单位数量 =null;}//其他 默认为 null
else{
Myentity.单位数量 = dr.GetString(FieldIndexs[3]);
}
if (dr.IsDBNull(FieldIndexs[4])) {
Myentity.订购量 ="";}//字符类型,默认为 空字符
else{
Myentity.订购量 = dr.GetInt16(FieldIndexs[4]);
}
if (dr.IsDBNull(FieldIndexs[5])) {
Myentity.供应商ID ="";}//字符类型,默认为 空字符
else{
Myentity.供应商ID = dr.GetInt32(FieldIndexs[5]);
}
if (dr.IsDBNull(FieldIndexs[6])) {
Myentity.库存量 ="";}//字符类型,默认为 空字符
else{
Myentity.库存量 = dr.GetInt16(FieldIndexs[6]);
}
if (dr.IsDBNull(FieldIndexs[7])) {
Myentity.类别ID ="";}//字符类型,默认为 空字符
else{
Myentity.类别ID = dr.GetInt32(FieldIndexs[7]);
}
if (dr.IsDBNull(FieldIndexs[8])) {
Myentity.再订购量 ="";}//字符类型,默认为 空字符
else{
Myentity.再订购量 = dr.GetInt16(FieldIndexs[8]);
}
if (dr.IsDBNull(FieldIndexs[9])) {
Myentity.中止 =null;}//其他 默认为 null
else{
Myentity.中止 = dr.GetBoolean(FieldIndexs[9]);
}
ResultList.Add(Myentity);
}
dr.Close();
return ResultList;
}//GetList
以上代码直接通过我的代码生成器生成,欢迎使用。。
地址:http://blog.csdn.net/Qqwwee_Com/archive/2005/11/06/524080.aspx
#region 广告开始
CSDN小助手 V2.5,更快、更爽、更方便的浏览CSDN论坛!
界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/11/05/523395.aspx
下载:http://szlawbook.com/csdnv2
#endregion
jijl2001
2005-11-22
打赏
举报
回复
楼上有理
止戈而立
2005-11-22
打赏
举报
回复
看你需要显示什么数据了。。如果是想用dataGrid把数据显示出来,当然是fill了。。
如果是想一个个的显示。。DataReader也许好一些。。
fokker
2005-11-22
打赏
举报
回复
DataReader是只读的,速度应该比Fill出来的DataSet要快。
happyfamily
2005-11-22
打赏
举报
回复
后者好一些
1、得到了结构填充,加快了速度。
2、datareader读数据最快。
lsqkeke
2005-11-22
打赏
举报
回复
DataAdapter的fill方法好
mqmmx
2005-11-22
打赏
举报
回复
刚才google上查了一下,原来fill方法最终也是用reader填充的,看来只查询的话确实DataReader快一些。
Micheal_test
2005-11-22
打赏
举报
回复
如果只是读出来用datareader比较快,能不用DataSet就不用,这样程序的性能会好一些。
flyingZFX
2005-11-22
打赏
举报
回复
学习。
自己实现
Data
Adapter
的
方法
手动实现Sql
Data
Adapter
类的
方法
,解析该类的运行方式。
其实它就是依靠SqlConnection,SqlCommand,
Data
Reader
来实现的,对学习Ado.net的思想很有用
深入理解ADO.NET 的更新机制
.学习Ado.net的好文章.如果以前只用过VB6的ADO,转到.net后一定要了解ADO.NET.
使用ADO.NET技术开发数据库
使用ADO.NET技术开发数据库
ADO.NET.read.
data
.development.rar_objects
ADO.NET基本对象开发
读
取Access数据库数据ADO.NET Basic Access
data
base objects to read
data
development
ADO.NET数据库实例教程
ADO.NET数据库实例教程 学习学习不错
C#
111,097
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章