ADO.NET笔记——使用DataSet返回数据
相关知识:
- 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中经过过滤后的数据,并且将用来绑定到数据展现控件中
-
- 连接的打开和关闭
- 与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返回数据的更多相关文章
- Spring MVC 学习笔记11 —— 后端返回json格式数据
Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...
- WCF分布式开发步步为赢(8):使用数据集(DataSet)、数据表(DataTable)、集合(Collection)传递数据
数据集(DataSet).数据表(DataTable).集合(Collection)概念是.NET FrameWork里提供数据类型,在应用程序编程过程中会经常使用其来作为数据的载体,属于ADO.NE ...
- ADO.NET笔记——基本概念
ADO.NET中的主要对象: Connection:连接对象.用于建立从应用程序到数据库服务器指定数据库的连接通道 Command:命令对象.用于执行增删查改等数据库语句命令 DataReader:数 ...
- Ado.Net,关于DataSet和DataTable
DataSet和DataTable的 区别与联系 1.简要说明二者关系 在我们编写代码的时候从数据库里取出数据,填充到dataset里,再根据表的名字,实例化到 DataTable 中. ●注意如下 ...
- 浅谈WebService返回数据效率对比
原文链接 http://www.dotnetgeek.cn/xuexiwebservice1.html 一.什么是WebService: 简单通俗来说,就是企业之间.网站之间通过Internet来访问 ...
- 【Android】Intent的使用-返回数据给上一个活动
第一个Activity A启动另外一个Activity B,B返回数据给A ============================================================= ...
- JQuery请求WebService返回数据的几种处理方式
打开自己的博客仔细浏览了一番,发现已经好久没有写博客了,由于最近一直比较忙碌懈怠了好多.默默反省三分钟.......言归正传,现在就对最近在学习webservice的过程中遇到的几种类型的问题中我的理 ...
- IOS开发笔记(4)数据离线缓存与读取
IOS开发笔记(4)数据离线缓存与读取 分类: IOS学习2012-12-06 16:30 7082人阅读 评论(0) 收藏 举报 iosiOSIOS 方法一:一般将服务器第一次返回的数据保存在沙盒里 ...
- wcf传输Dataset大数据量 -压缩(一)
wcf传输Dataset大数据量 -压缩(一) 由于WCF不能传输DataTable(不能序列化),所以更多项目中都会使用DataSet作为查询集合的首选返回类型,但是由于DataSet会生成很多的状 ...
随机推荐
- vxworks 实时操作系统
VxWorks 是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统.Tornado 是WRS 公司推出的一套实时操作系统开发环境,类似Mi ...
- 项目源码--Android美图秀秀源码
下载源码 技术要点: 1. 多种分类分享高清图片 2. 图片缓存技术 3. 图片缩图显示 4. 图片实时加载技术 5. 多点触控技术 6. HTTP网络数据搜索技术 7. 精美UI图片显示 ...
- Advanced Awk for Sysadmins
转:http://www.linuxforu.com/2011/06/advanced-awk-for-sysadmins/ By Vishal Bhatia on June 1, 2011 in H ...
- Sql 之 sql中的强制类型转换
1. convert(数据类型, 字段名) convert(datetime, startDate) 2. cast(字段名 as 数据类型) ,))
- LOG4NET开源日志dll引用流程,在net3.5中已经实践ok
一,在app.config中配置 <?xml version="1.0"?><configuration> <configSections> & ...
- 总结 IOS 7 内存管理
[iOS7的一些总结].iOS中的内存管理 我们知道,为了更加方便地处理内存管理问题,将开发人员从繁琐的内存的分配和释放工作中解放出来而专注于产品和逻辑,iOS提供了一种有效的方法, 即自动引用计数A ...
- OC之Copy语法
转载请注明:http://www.cnblogs.com/letougaozao/p/3631105.html 概念 内存管理 NSString的copy实例 对象的copy实例 一.概念 目的:在改 ...
- 《算法导论》习题解答 Chapter 22.1-4(去除重边)
思路:重开一个新图,按着邻接列表的顺序从上到下遍历,每遍历一行链表前,清空visited数组,如果没有访问过这个元素,则加入新图,如果已经访问过了(重边),则不动. 伪代码: 复杂度:O(V+E) f ...
- msql_DDL_创建table
• 语法: create table 表名(• 列名1 列类型 [<列的完整性约束>],• 列名2 列类型 [<列的完整性约束>],• ... ... ); • PRIMARY ...
- hdu3746
Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...