DataReader,性能快,不占内存,但只能读,且一次读取一条,用来数据绑定比DataSet要好,比如DataGrid,DataList的DataSource用DataReader性能就好些
DataSet 把数据都读到内存,可以离线的新增,编辑,删除数据,再回发给数据库更新
就看你的目的是什么

解决方案 »

  1.   

    在实际应用中,如果你要非常频繁的从数据库的不同表里读取相关联的记录,记录数又不太多,那么用datareader。而在使用数据绑定控件的时候,建议使用dataset,因为它有着非常强大的方法和属性,比如支持排序,离线的新增,编辑,删除等等,总之dataset到了你手里随你怎么玩,不怕做不到就怕你想不到。
      

  2.   

    使用 ADO.NET DataReader 从数据库中检索只读、只进的数据流。查询结果在查询执行时返回,在并存储在客户端的网络缓冲区中,直到您使用 DataReader 的 Read 方法对它们发出请求。使用 DataReader 可以提高应用程序的性能,因为一旦数据可用,DataReader 方法就立即检索该数据,而不是等待返回查询的全部结果;并且在默认情况下,该方法一次只在内存中存储一行,从而降低了系统开销
    ADO.NET DataSet 是数据的一种内存驻留表示形式,无论它包含的数据来自什么数据源,它都会提供一致的关系编程模型。一个 DataSet 表示整个数据集,其中包含对数据进行包含、排序和约束的表以及表间的关系。
      

  3.   

    各位大哥,看来是小弟表错意了,我要问是诸如:
    SqlConnection conn 
    = new SqlConnection( "Server=(local);Integrated Security=SSPI;database=Pubs");SqlConnection conn 
    = new SqlConnection("server=(local)\\NetSDK;database=pubs;Integrated Security=SSPI");SqlConnection conn = new SqlConnection(
    "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;");SqlConnection conn = new SqlConnection(
    " data source=(local);initial catalog=xr;integrated security=SSPI;
    persist security info=False;workstation id=XURUI;packet size=4096; ");SqlConnection myConn  = new 
    System.Data.SqlClient.SqlConnection("Persist Security Info=False;Integrated 
    Security=SSPI;database=northwind;server=mySQLServer");SqlConnection conn = new SqlConnection( 
    " uid=sa;pwd=passwords;initial catalog=pubs;data source=mydatabase;Connect Timeout=900");这些东东,他们每种连接方式的优缺点。
      

  4.   

    看看MS的网站上那篇“Microsoft数据访问指南”的文章吧。
      

  5.   

    DataReader是一个查询数据库后返回的只读数据流。它一次只能包含一行数据,而且它有一个限制:只能前向的读取数据。DataReader的确支持对多个结果集的访问,但是一次只能访问一次(按照检索的顺序)。正如ADO的最初版本那样,一旦DataReader到数据库的连接中断,就无法再访问数据了,这就意味着在DataReader的使用期间,它与数据库之间的连接不能断开。只有当连接断开时,才可以访问输出参数或者返回值。所有的DataReader的接口实现都是相同的,也就是说,所有的DataReader都应该提供相同的功能集合。每一个DataReader实现都是针对特定数据供应者(如SQL Server或者Oracle)而优化的。1.0版本的Microsoft .NET Framework包括一个针对SQL Server的System.Data.SqlClient.SqlDataReader,它还为较为普遍的OLEDB供应者提供了System.Data.OleDb.OleDbDataReader。1.1版本的.NET Framework进一步引入了SqlCeDataReader(用来连接Windows CE版的SQL Server)、OdbcDataReader(用于ODBC数据源)以及OracleDataReader(用于连接Oracle数据库)。你无须一定要使用Microsoft所提供的DataReader,各个数据库提供商常常都有自己的.NET提供。此外,你可以通过IdataReader接口实现自己的DataReader。
      

  6.   

    DataSet是ADO.NET离线体系的核心,它用于在离线状态下存储数据。它完全支持XML,因此XML文档可以读入DataSet、而DataSet也可以导入到XML文档。这个特性使得DataSet可以轻松的在网络上传输,因此它可以作为Web服务或者其它类型远程调用的返回值。对DataSet的改动会波及到数据源。DataSet与DataReader不同,你即可以向前、也可以向后进行数据导航,其内容可以过滤,或者按需要进行搜索,使得所有的记录在任何给定的点上都可以访问到。DataSet是System.Data名字空间的一部分,并不特定于任何具体的数据供应者,甚至可以说是独立于数据供应者。它依赖与各种特定数据供应者对应的DataAdapter(它位于DataSet和数据存储之间)。DataAdapter用一个DataReader来把特定的数据供应者的数据填充到DataSet。
      

  7.   

    用DataReader还是DataSet?http://www.fawcette.com/china/XmlFile.aspx?ID=300
      

  8.   

    ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemdatasqlclientsqlconnectionclassconnectionstringtopic.htm
      

  9.   

    1. 将数据存储在数据集内
        Visual Studio .NET 应用程序中数据访问的常见模型是在数据集中存储数据并使用数据适配器读取和写入数据库中的数据。(.NET 应用程序使用“.NET Framework”:公共语言运行库和托管类。)数据集模型的优越性有:     使用多个表   一个数据集可以包含多个结果表,它将这些表作为离散对象维护。您可以单独使用这些表或作为父子表在它们之间导航。 
        操作来自多个源的数据   数据集内的表可表示来自多个不同源的数据,例如来自不同数据库、XML 文件、电子表格等的数据,都可出现在同一个数据集中。数据在数据集内以后,您可以操作数据并以同种格式关联数据,就好像它们来自单个源。 
        在分布式应用程序中的层间移动数据   通过在数据集内保存数据,您可以方便地将它在应用程序的表示层、业务层和数据层之间移动。 
        与其他应用程序进行数据交换   数据集提供一种功能强大的数据交换方式,它可以与您的应用程序的其他组件以及其他应用程序交换数据。数据集包含对许多功能的广泛支持,如将数据序列化为 XML 和读写 XML 架构。 
        数据绑定   如果正在使用窗体,将控件绑定到数据集内的数据通常比执行命令后以编程方式将数据值加载到控件方便。 
    维护记录以供重复使用   通过数据集,您无需再次查询数据库即可重复使用相同的记录。使用数据集功能,您可以对记录进行筛选和排序,并且可以将数据集用作数据源(如果您正在分页)。 
        便于编程   当使用数据集时,可以生成一个将其结构表示为对象的类文件(例如,数据集内的 Customers 表可以作为 dataset.Customers 对象访问)。这使得用它编程更容易、更清楚也更不易出错,并且受到智能感知、“数据适配器配置向导”等 Visual Studio 工具的支持。 
    ////////////////////////////////////////////////
    2.直接执行数据库操作    您还可以直接与数据库交互。在此模型中,可使用包含 SQL 语句或对存储过程的引用的数据命令对象。然后您可以执行命令以执行该操作。如果该命令返回结果集(即如果该命令执行 Select 语句),则可以使用数据读取器获取数据,数据读取器的功能类似于高效的只读游标。    直接执行数据库操作具有特定的优点,这些优点包括:     额外功能   如前所述,有一些操作只能通过执行数据命令完成,如执行 DDL 命令。 
    对执行的更多的控制   通过使用命令和数据读取器(如果您正读取数据),您可以对如何和何时执行 SQL 语句或存储过程以及哪些将成为结果或返回值进行更多的控制。 
    更少的系统开销   通过直接在数据库中读写,您可以不必在数据集内存储数据。由于数据集需要内存,因此可以减少应用程序中的一些系统开销。当您打算只使用数据一次(如在 Web 页中显示搜索结果)时尤其如此。在这种情况下,显示数据时可能不需要创建和填充数据集这一步。 
        某些情况下编程更少   在少数情况下(尤其是 Web 应用程序),保存数据集状态需要额外编程。例如,在“Web 窗体”页中,每个往返过程都重新创建页面;除非添加编程来保存和还原数据集,否则每个往返过程也都会放弃并重新创建数据集。如果您使用数据读取器直接从数据库读取,则可以避免管理数据集所需的额外步骤。