请问DataSet,DataReader,DataTable有什么区别?? 请问DataSet,DataReader,DataTable有什么区别?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 简单说就是: DataSet:数据集。一般包含多个DataTable,用的时候,dataset["表名"]得到DataTable DataTable:数据表。 一: SqlDataAdapter da=new SqlDataAdapter(cmd); DataTable dt=new DataTable(); da.Fill(dt); ----------------- 直接把数据结果放到datatable中, 二: SqlDataAdapter da=new SqlDataAdapter(cmd); DataSet dt=new DataSet(); da.Fill(dt); ---------------- 数据结果放到dataset中,若要用那个datatable,可以这样:dataset[0] 更常见的用法: SqlDataAdapter da=new SqlDataAdapter(cmd); DataSet dt=new DataSet(); da.Fill(dt,"table1"); 用的时候:这样取datatable: dataset["table1"] DataSet不能直接用来存储数据,如果仅用DataSet,它会自动的生成一个DataTable,所以看上去就像一个DataTable。 如果有很多个DataTable需要同时绑定到某个控件,就可以把多个DataTable添加到一个DataSet中,分别起不同的名字就可以了TopDataReader基于连接,它返回的数据是只读只向前的,适合简单地浏览且耗时比较短的操作。DataSet对象会将所需数据读入内存然后断开连接。它适合对数据进行复杂长时间的操作,并且需要更新数据的情况。TopSqlDataReader只是建立与数据库之间的类似于一个指针关系,在没有调用Read()方法之间它不从数据读出任何数据,而在调用Read()时也只是从数据库中读出一条数据.DATATABLE是数据表的一个复本,至于DataSet可以反它看作一个数据库,因为它不但可以包括多个表而且还能包括各表之间的关系.所以在进行大量数据访问时(特别是分页方式的访问)建议使用SqlDataReader,这样可以节省大量的内存开销.TopDataSet就像内存数据库, DataTable就是表, 库可以包含多个表,也可以包含表之间的关系。 1楼的在哪里Copy过来的?不过还不错! 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中读取的数据,也能实现离线的目的,虽然麻烦一点,但是后期很方便使用。 以上只是简单的比较,其它更多的都不说了。 大型项目中,DataReader几乎是首选,DataSet难觅踪影。 DataSet 数据集DataTable 数据表 DS 数据集 可以包含1个或多个DT 可修改传回SQLDR 只能读取数据 这个LINQ怎么写? 怎样实现按类别查询 Asp.net 页面数据如何导出到Excel? .net 2.0 treeview节点上浮动信息提示的问题 写程序记录一个用户在会话期间对一个页面的单击次数? 在VS.NET 1.0下面开发的在2003下打不开,在vs.net 2003下开发的在1.0下面打不开,我都要疯了 如何在asp.net页面中显示dwg格式的图纸 gridview标题中插入时间 sqlserver里面一张表要是有60万条记录用asp/asp.net/delphi处理、进行查询等操作 用户验证是怎么回事啊 SQLSERVER2005 sa登陆失败 输入字符串的格式不正确
DataSet:数据集。一般包含多个DataTable,用的时候,dataset["表名"]得到DataTable
DataTable:数据表。
一:
SqlDataAdapter da=new SqlDataAdapter(cmd);
DataTable dt=new DataTable();
da.Fill(dt);
-----------------
直接把数据结果放到datatable中,
二:
SqlDataAdapter da=new SqlDataAdapter(cmd);
DataSet dt=new DataSet();
da.Fill(dt);
----------------
数据结果放到dataset中,若要用那个datatable,可以这样:dataset[0]
更常见的用法:
SqlDataAdapter da=new SqlDataAdapter(cmd);
DataSet dt=new DataSet();
da.Fill(dt,"table1");
用的时候:这样取datatable:
dataset["table1"]
DataSet不能直接用来存储数据,如果仅用DataSet,它会自动的生成一个DataTable,所以看上去就像一个DataTable。
如果有很多个DataTable需要同时绑定到某个控件,就可以把多个DataTable添加到一个DataSet中,分别起不同的名字就可以了Top
DataReader基于连接,它返回的数据是只读只向前的,适合简单地浏览且耗时比较短的操作。DataSet对象会将所需数据读入内存然后断开连接。它适合对数据进行复杂长时间的操作,并且需要更新数据的情况。TopSqlDataReader只是建立与数据库之间的类似于一个指针关系,在没有调用Read()方法之间它不从数据读出任何数据,而在调用Read()时也只是从数据库中读出一条数据.DATATABLE是数据表的一个复本,至于DataSet可以反它看作一个数据库,因为它不但可以包括多个表而且还能包括各表之间的关系.所以在进行大量数据访问时(特别是分页方式的访问)建议使用SqlDataReader,这样可以节省大量的内存开销.TopDataSet就像内存数据库,
DataTable就是表,
库可以包含多个表,也可以包含表之间的关系。
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中读取的数据,也能实现离线的目的,虽然麻烦一点,但是后期很方便使用。 以上只是简单的比较,其它更多的都不说了。
大型项目中,DataReader几乎是首选,DataSet难觅踪影。
DR 只能读取数据