相关知识:

  1. DataSet和DataAdapter的内部结构:

    •   
    • DataSet通过DataAdapter从数据库中获取数据
    • DataSet对象内部包括一个集合(Tables),也就是可以拥有多个表(DataTables);每个表存放着从数据库放回的一个结果集(一般由一条SELECT语句产生一个结果集)
    • DataTable对象包含一个行集合(Rows),集合中的每个元素都是一个DataRow类型的对象。DataRow提供了通过下标或者列名进行访问字段数据的操作
    • DataTable对象还包含一个列集合(Columns),集合中的每个元素都是一个DataColumn类型的对象,用于代表查询结果集合中每一列的属性,例如名称、数据类型等
    • DataSet对象包含一个关联集合(Relations),集合中的每一个DataRelation代表两个表之间的关联。请注意,数据库表之间的关联不会被自动带到DataSet中来,需要变成为DataSet中的SataTable建立关联
    • 可以由DataTable创建(DataView),DataView可以用来代表DataTable中经过过滤后的数据,并且将用来绑定到数据展现控件中
  2. 连接的打开和关闭
    • 与SqlDataReader不用,使用DataAdapter对象,把数据加载到DataSet中,并不需要显式打开和关闭连接
    • 当调用DataAdapter的Fill函数时,该函数内部首先检查连接对象是否已经打开
      • 如果没有打开,则打开链接,填充数据,然后关闭连接
      • 如果已经打开,则直接填充数据,之后也不关闭连接
    • 一旦数据已经填充到DataSet中,就不必与数据库继续保持连接。事实上,DataSet中的数据全在内存中,与数据库无关。

代码示例:

(示例数据库使用红皮书的示例数据库:AdventureWorks_WroxSSRS2012)

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient; namespace ConsoleApplication10
{
class Program
{
static void Main(string[] args)
{
string strConn = @"server=Joe-PC;database=AdventureWorks_WroxSSRS2012;uid=sa;pwd=root";
SqlConnection conn = new SqlConnection(strConn); DataSet ds = new DataSet(); string strCmd1 = "SELECT ProductCategoryID,Name FROM Production.ProductCategory";
SqlDataAdapter da1 = new SqlDataAdapter(strCmd1, conn);
// 将第一个查询结果集合填入DataSet中,并且将DataTable命名为"Category"
da1.Fill(ds, "Category"); string strCmd2 = "SELECT ProductSubcategoryID,ProductCategoryID,Name From Production.ProductSubcategory";
SqlDataAdapter da2 = new SqlDataAdapter(strCmd2, conn);
// 将第二个查询结果集合填入DataSet中,并且将DataTable命名为"Subategory"
da2.Fill(ds, "Subcategory"); // 使用视图
// 打印表中的数据
Console.WriteLine("主类别表:");
DataTable dt1 = ds.Tables["Category"];//获得Category表
DataView dv1 = new DataView(dt1); //创建视图
dv1.Sort = "ProductCategoryID ASC"; //设置排序规则
foreach (DataRowView drv in dv1)
{
Console.WriteLine("{0}:{1}", drv[], drv["Name"]);
} Console.WriteLine(""); Console.WriteLine("过滤后的子类别表:");
DataTable dt2 = ds.Tables["Subcategory"];
DataView dv2 = new DataView(dt2);
dv2.RowFilter = "ProductSubcategoryID>10";//设置过滤条件
dv2.Sort = "ProductSubcategoryID ASC";
foreach (DataRowView drv in dv2)
{
Console.WriteLine("{0}:{1}", drv[], drv["Name"]);
} Console.WriteLine(""); // 在两个表之间建立关联
DataRelation relation = new DataRelation("ProductCategory_ProductSubcategory",
dt1.Columns["ProductCategoryID"], dt2.Columns["ProductCategoryID"]);
ds.Relations.Add(relation);//将关联添加到DataSet的集合中
try
{
for (int i = ; i < dt1.Rows.Count; i++)
{
DataRow dri = dt1.Rows[i];
//根据关联找到数据相关的子类别数据
DataRow[] subRows = dri.GetChildRows(relation);
Console.WriteLine("{0}的子类别信息:", dri["Name"]);
foreach (DataRow dr in subRows)
{
Console.WriteLine("{0}:{1}", dr[], dr["Name"]);
}
Console.WriteLine("");
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
}
}

ADO.NET笔记——使用DataSet返回数据的更多相关文章

  1. Spring MVC 学习笔记11 —— 后端返回json格式数据

    Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...

  2. WCF分布式开发步步为赢(8):使用数据集(DataSet)、数据表(DataTable)、集合(Collection)传递数据

    数据集(DataSet).数据表(DataTable).集合(Collection)概念是.NET FrameWork里提供数据类型,在应用程序编程过程中会经常使用其来作为数据的载体,属于ADO.NE ...

  3. ADO.NET笔记——基本概念

    ADO.NET中的主要对象: Connection:连接对象.用于建立从应用程序到数据库服务器指定数据库的连接通道 Command:命令对象.用于执行增删查改等数据库语句命令 DataReader:数 ...

  4. Ado.Net,关于DataSet和DataTable

    DataSet和DataTable的 区别与联系 1.简要说明二者关系 在我们编写代码的时候从数据库里取出数据,填充到dataset里,再根据表的名字,实例化到 DataTable 中. ●注意如下  ...

  5. 浅谈WebService返回数据效率对比

    原文链接 http://www.dotnetgeek.cn/xuexiwebservice1.html 一.什么是WebService: 简单通俗来说,就是企业之间.网站之间通过Internet来访问 ...

  6. 【Android】Intent的使用-返回数据给上一个活动

    第一个Activity  A启动另外一个Activity B,B返回数据给A ============================================================= ...

  7. JQuery请求WebService返回数据的几种处理方式

    打开自己的博客仔细浏览了一番,发现已经好久没有写博客了,由于最近一直比较忙碌懈怠了好多.默默反省三分钟.......言归正传,现在就对最近在学习webservice的过程中遇到的几种类型的问题中我的理 ...

  8. IOS开发笔记(4)数据离线缓存与读取

    IOS开发笔记(4)数据离线缓存与读取 分类: IOS学习2012-12-06 16:30 7082人阅读 评论(0) 收藏 举报 iosiOSIOS 方法一:一般将服务器第一次返回的数据保存在沙盒里 ...

  9. wcf传输Dataset大数据量 -压缩(一)

    wcf传输Dataset大数据量 -压缩(一) 由于WCF不能传输DataTable(不能序列化),所以更多项目中都会使用DataSet作为查询集合的首选返回类型,但是由于DataSet会生成很多的状 ...

随机推荐

  1. 实例源码--IOS高仿微信打飞机游戏(完整功能)

    下载源码 技术要点: 1. IOS游戏开发基础框架 2. 高仿打飞机游戏 3. 游戏背景音频技术 4.源码详细的中文注释 ……. 详细介绍: 1. IOS游戏开发基础框架 此套源码为涉及IOS游戏开发 ...

  2. Triangular Sums

    描述 The nth Triangular number, T(n) = 1 + … + n, is the sum of the first n integers. It is the number ...

  3. 转 如何使用velocity模板引擎开发网站

    基于 Java 的网站开发,很多人都采用 JSP 作为前端网页制作的技术,尤其在是国内.这种技术通常有一些问题,我试想一下我们是怎样开发网站的,通常有几种方法: 1:功能确定后,由美工设计网页的UI( ...

  4. 关于Google Chorme中字体小于12px的问题

    问题:当字体大小设置成小于12px时,Google chrome中字体的大小始终显示为12px. 而其他浏览器则没有这个问题. 这时只需要在要改变字体大小的元素中添加 -webkit-transfor ...

  5. js技巧总结

    很早以前看到的代码,同时加上一些我在项目中用到的代码,感觉很实用,在这里记录下来,怕忘记了,有些代码忘记在哪看到的了,所以就不贴网址了,感谢各位大神的分享!如果有其他的好的方法,欢迎留言~ 1.取整的 ...

  6. mybatis 处理数组类型及使用Json格式保存数据 JsonTypeHandler and ArrayTypeHandler

    mybatis 比 ibatis 改进了很多,特别是支持了注解,支持了plugin inteceptor,也给开发者带来了更多的灵活性,相比其他ORM,我还是挺喜欢mybatis的. 闲言碎语不要讲, ...

  7. JavaScript 键盘event.keyCode值列表大全

      JavaScript 键盘event.keyCode值列表大全   event.keyCode值列表大全,对于需要根据键盘按键触发相应事件的朋友需要. 网上收集的KeyCode值方便大家查找: k ...

  8. Gstreamer基本概念介绍(开发前必读)

    1. 元件(Elements) 元件(element)是GStreamer中最重要的概念.你可以通过创建一系列的元件(Elements),并把它们连接起来,从而让数据流在这个被连接的各个元件(Elem ...

  9. POJ 2253 Frogger (最短路)

    Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28333   Accepted: 9208 Descript ...

  10. jQuery选择器之内容过滤选择器Demo

    测试代码: 04-内容过滤选择器.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...