DataSet是ADO.NET的中心概念.可以把DataSet当成内存中的数据库,DataSet是不依赖与数据库的独立数据集合.所谓独立,就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的.DataSet在内部是用XML来描述数据的,由于XML是一种与平台无关、与语言无关的数据描述语言,而且可以描述复杂关系的数据,比如父子关系的数据,所以DataSet实际上可以容纳具有复杂关系的数据,而且不在依赖于数据库链路。
  正是由于DataSet才使得程序员在编程时可以屏蔽数据库之间的差异,从而获得一致的编程模型。DataSet支持多表、表间关系、数据约束等,和关系数据库的模型基本一致。
  DataSet 是 ADO.NET 结构的主要组件,它是从数据源中检索到的数据在内存中的缓存。DataSet 由一组 DataTable 对象组成,您可使这些对象与 DataRelation 对象互相关联。您还可通过使用 UniqueConstraint 和 ForeignKeyConstraint 对象在 DataSet 中实施数据完整性。有关使用 DataSet 对象的详细信息,请参见 在 ADO.NET 中使用 DataSet。
  尽管 DataTable 对象中包含数据,但是 DataRelationCollection 允许您遍览表的层次结构。这些表包含在通过 Tables 属性访问的 DataTableCollection 中。当访问 DataTable 对象时,请注意它们是按条件区分大小写的。例如,如果一个 DataTable 被命名为“mydatatable”,另一个被命名为“Mydatatable”,则用于搜索其中一个表的字符串被认为是区分大小写的。但是,如果“mydatatable”存在而“Mydatatable”不存在,则认为该搜索字符串不区分大小写。有关使用 DataTable 对象的更多信息,请参见 创建 DataTable。
  DataSet 可将数据和架构作为 XML 文档进行读写。数据和架构可通过 HTTP 传输,并在支持 XML 的任何平台上被任何应用程序使用。可使用 WriteXmlSchema 方法将架构保存为 XML 架构,并且可以使用 WriteXml 方法保存架构和数据。若要读取既包含架构也包含数据的 XML 文档,请使用 ReadXml 方法。
  在典型的多层实现中,用于创建和刷新 DataSet 并依次更新原始数据的步骤包括: 
  通过 DataAdapter 使用数据源中的数据生成和填充 DataSet 中的每个 DataTable。
  通过添加、更新或删除 DataRow 对象更改单个 DataTable 对象中的数据。
  调用 GetChanges 方法以创建只反映对数据进行的更改的第二个 DataSet。
  调用 DataAdapter 的 Update 方法,并将第二个 DataSet 作为参数传递。
  调用 Merge 方法将第二个 DataSet 中的更改合并到第一个中。
  针对 DataSet 调用 AcceptChanges。或者,调用 RejectChanges 以取消更改。
 
 
DataSet是ADO.NET中的核心对象. DataSet包含一组DataTable对象.
每个DataTable对象都有一些子对象DataRow和DataColumn, 表示数据库表中的行和列. 通过这些对象可以获取表,行和列中的所有元素.
DataSet的常见操作是用DataAdapter对象的Fill()方法给它填充数据.
访问DataSet中的表:
1. 按表名访问: thisDataSet.Tables["Customers"]  指定DataTable对象Customers
2. 按索引(索引是基于0的)访问: thisDataSet.Tables[0]  指定DataSet中的第一个DataTable.
访问DataTable的行和列:
1. 在每个DataTable中,都有一个Rows属性, 它是DataRow对象的集合.
myDataSet.Tables["Customers"].Rows[n]
在thisDataSet的DataTable对象Customers中指定行号n-1(索引是基于0的).
2. DataRow对象有一个重载的索引符属性, 允许按列名或列号访问各个列.
thisDataSet.Tables["Customers"].Rows[n]["CompanyName"]
实例:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace DataSetReader
{
    class Program
    {
        static void Main(string[] args)
        {
            //string connstring = @"Data Source=ZHANG-1D093B228;Initial Catalog=northwind;User ID=sa;Password=sa";
            //string connstring = @"Server=.;Integrated Security=True; Database=northwind";
            //string connstring = @"Server=ZHANG-1D093B228;Integrated Security=True; Database=northwind";
            string connstring = @"Server=localhost;Integrated Security=True; Database=northwind";

SqlConnection thisconnection = new SqlConnection(connstring );
            string strsql=@"select customerID,ContactName from Customers";
            SqlDataAdapter thisAdapter = new SqlDataAdapter(strsql, thisconnection);
            DataSet thisDataSet = new DataSet();
            thisAdapter.Fill(thisDataSet, "Customers");
            foreach (DataRow therow in thisDataSet.Tables["Customers"].Rows)
            {
                Console.WriteLine(therow["CustomerID"] + "\t" + therow["ContactName"]);
            }
            thisconnection.Close();
            Console.WriteLine("Program finished, press Enter/Return to continue:");
            Console.ReadLine();
        }
    }
}

 

在典型的多层实现中,用于创建和刷新 DataSet 并依次更新原始数据的步骤包括:

1.通过 DataAdapter 使用数据源中的数据生成和填充 DataSet 中的每个 DataTable。

2.通过添加、更新或删除 DataRow 对象更改单个 DataTable 对象中的数据。

3.调用 GetChanges 方法以创建只反映对数据进行的更改的第二个 DataSet。

4.调用 DataAdapter 的 Update 方法,并将第二个 DataSet 作为参数传递。

5.调用 Merge 方法将第二个 DataSet 中的更改合并到第一个中。

6.针对 DataSet 调用 AcceptChanges。或者,调用 RejectChanges 以取消更改。

 
 

ado.dataset的更多相关文章

  1. ADO:DataSet合并两张表( ds.Merge(ds1))

    原文发布时间为:2008-08-01 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...

  2. ADO:DataSet存入缓存Cache中并使用

    原文发布时间为:2008-08-01 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...

  3. Delphi7 ADO面板上的控件简介

    ? ADO Connection的主要方法:1) Begin Trans    开始启动一个新的事务,必须保证数据连接处于激活状态.2) Cancel    关闭于数据库的连接.3) Commit T ...

  4. Client Dataset Basics

    文章出处:  http://www.informit.com/articles/article.aspx?p=24094 In the preceding two chapters, I discus ...

  5. WPF SDK研究 之 数据绑定

    这一章介绍数据绑定.本章共计27个示例,全都在VS2008下.NET3.5测试通过,点击这里下载:ConnectedData.rar 1.ShowDataWithoutBinding注: <?M ...

  6. ASP.NET的MVC设计模式

    当开发者听到“设计模式”这个词时,他们通常联想到两个场景.一组开发者正在讨论许多创造性意见,正在开会,但是却没有进行编码.另外一组人能制定出正确的计划,保证系统能够开发成功,代码可以重用. 而现实一般 ...

  7. 将Json数据转换为ADO.NET DataSet对象

    Json数据转换为ADO.NET DataSet其实方法有很多,Newtonsoft.Json也提供了DataSet的Converter用以转换Json数据.但是有些情况下DataSet Conver ...

  8. ado.net access oracle dataset via store procedure

    使用存储过程返回结果集,并绑定到ado.net对象中在sql server里面是非常直观的. 1: create procedure GetAllRecords 2: as 3: select * f ...

  9. ADO.NET基础02(语句参数化,配置文件,DataSet与DataTable)

    ADO.NET连接池 ado.net默认启用了连接池 *如何清空连接池?Connection的静态方法ClearAllPools(). ClearPool() Ado.net连接池使用总结: 1.第一 ...

随机推荐

  1. spring dataSourceRouter自动切换数据源

    spring多数据源的切换,主要用到的是AbstractRoutingDataSource这个路由类,当我们的自定义的一个路由分发类继承AbstractRoutingDataSource类后,重写de ...

  2. 第二天就跳票 将wikipedia上的英文词条翻译为中文 手动

    忙着改简历一整天,刚说完一天一博,就要跳票了. 还是写点东西吧. 今天又翻译了一个维基百科上的条目,刚过一天就忘了怎么弄,还得回头翻帖子.在这先记一下,省的以后找不到. 1.注册个wiki账号,轻松过 ...

  3. mybatis 的<![CDATA[ ]]>

    示例: xml文件: <!-- 获取条数 --> <select id="getCount" parameterType="Map" resu ...

  4. 现代浏览器原生js获取id号方法

    <div id="tests" class="a b c" style="color:#f00">123</div> ...

  5. 【搜索】BZOJ 3990: 【Sdoi 2015】排序

    3990: [SDOI2015]排序 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 336  Solved: 164[Submit][Status][ ...

  6. [itint5]最大子矩阵和

    http://www.itint5.com/oj/#39 最大子矩阵和,复杂度O(n^3).利用了最大子段和的方法. int maxRectSum(vector<vector<int> ...

  7. 你只是看起来很努力(只是做了一遍真题,草草的对了一遍答案,然后冲出自习室继续她学生会的事情了,骗自己更容易)good——想起了自己在六大时候的无奈

    (转)你只是看起来很努力一次上课,一个女孩子垂头丧气的跟我说,老师,我考了四次四级,还没过,究竟是为什么. 我说,你真题做了吗?单词背了吗?她拿出已经翻破了的真题,跟我说,你讲的所有的题目我连答案都记 ...

  8. Android tabhost下的activity怎样获取传来的值

    android tabhost下的activity怎样获取传来的值,具体解决方案如下: 解决方案: 其他activity设置intent:Intent intent=new Intent(); int ...

  9. 搜索插件:ack.vim

    ack.vim是Perl脚本ack的前端,对于Vim,也是grepprg和quickfix的简单封装,非常适合搜索 github地址为 https://github.com/mileszs/ack.v ...

  10. android系统平台显示驱动开发简要:LCD基本原理篇『一』

    平台信息:内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博客 ...