ds当然要和数据库打交道啊!
ds对于使用多次查询,的系统较有利,因为ds之用查询一次即可,但ds也可以支持updata,del,ins的操作。

解决方案 »

  1.   

    我说的是查询一次后,ds就不在和数据库打交道了,dataset是个很耗资源的东西,但很多情况用它很方便,比如说使用datagrid控件时,那么在什么时候生成这个dataset呢?在请求含有datagrid控件的页面的时候吗?还是在web程序启动的时候生成呢?
      

  2.   

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

  3.   

    Web 窗体
    通常是使用数据命令;若要获取数据,则使用数据阅读器。因为每次 Web 窗体页进行往返行程时都重新创建该页及其控件和组件,所以每次都创建并填充数据集通常是效率低下的,除非您还想要在往返行程间将数据集放入缓存。在以下情况下使用数据集: 您想要使用多个单独的表或来自不同数据源的表。 
    您正与其他应用程序或诸如 XML Web services 之类的组件交换数据。 
    您需要通过从数据库获取的每一记录进行全面的处理。如果您使用数据命令和数据阅读器,则您一边读取每一记录一边处理它可能导致连接长期保持打开状态,这可能影响您的应用程序的性能和可缩放性。 
    如果数据处理涉及相互依赖的记录(例如,在相关表中查找信息)。 
    如果您想要执行 XML 操作,例如数据上的 XSLT 转换。 
    如果您喜欢数据集所提供的简便的编程方式。 
    有关更多信息,请参阅 Web 数据访问策略建议。XML Web services
    XML Web services 是 ASP.NET Web 应用程序,因此使用与 Web 窗体页相同的模型:每次对其进行调用时创建和放弃 XML Web services。这暗示 XML Web services 的数据访问模型大体上与用于 Web 窗体的数据访问模型相同。但是,XML Web services 通常是中间层对象,并且其主要用途通常是与 Web 上的其他应用程序交换数据。 在以下情况下使用数据集: 您的 XML Web services 发送和接收数据;例如,将数据作为方法的返回值发送并将数据作为方法参数接收。这在 XML Web services 中是基本选择;即使出于其他原因您可以考虑使用数据命令,但与其他组件的数据交换几乎始终意味着您应使用数据集。 
    出于上面列出的适合于 Web 窗体的任何原因。 
    在以下情况下请使用数据命令(并在适当时使用数据读取器): XML Web services 正检索标量值。 
    XML Web services 正执行非查询操作,例如 DDL 命令。 
    XML Web services 正调用存储过程以在数据库内执行逻辑。 
    Windows 窗体
    一般而言,在 Windows 窗体中使用数据集。Windows 窗体通常用于胖客户端,在其中每一用户操作不创建和放弃窗体(及其数据),这与 Web 窗体相同。Windows 窗体应用程序传统上还提供有益于维护记录缓存(例如逐一在窗体中显示记录)的数据访问方案。具体而言,在以下情况下请使用数据集: 如果您正重复使用相同的记录,例如允许用户在记录间导航。 
    如果您正使用 Windows 窗体数据绑定结构,该结构是为使用数据集而专门设计的。 
    出于在上面的 Web 窗体下列出的其他任何原因。 
    在以下情况下请使用数据命令(并在适当时使用数据读取器): 如果您正从数据库获取标量值 
    如果您正执行非查询操作,例如 DDL 命令。 
    如果您正要以只读方式在窗体中显示;例如,创建报告。另需注意的是,如果不需要在访问数据后保持数据可用,则使用数据命令。 
      

  4.   

    dataset在缓存在内存中数据集,它和sqldatareader其实有很大的区别,有一个原则是,如果更新数据频繁,并发多的话,用dataset,如果不频繁更新数据,数据记录小的话,用dataset比较合适.
    查询一次后,ds就不在和数据库打交道了,如果你只是在结果集中进行再查询,就不用在和数据库连了.
    至于你说的问题,当然是在请求含有datagrid控件的页面的时候生成dataset,因为正如你所说的dataset是很耗资源的.这就是为什么datagrid它不保持它的datasource状态的原因了.