请问DataSet,DataReader,DataTable有什么区别??

解决方案 »

  1.   

    简单说就是:   
      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就是表,   
      库可以包含多个表,也可以包含表之间的关系。
      

  2.   

    1楼的在哪里Copy过来的?不过还不错!
      

  3.   

    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难觅踪影。
      

  4.   

    DataSet 数据集DataTable  数据表
      

  5.   

    DS 数据集 可以包含1个或多个DT 可修改传回SQL
    DR 只能读取数据