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会生成很多的状 ...
随机推荐
- Good subsequence( RMQ+二分)
Description Give you a sequence of n numbers, and a number k you should find the max length of Good ...
- 在CentOS下安装配置MySQL
经常需要在linux环境下部署项目或安装Mysql数据库,由于记性不好,每次都是求助度娘,每次搜到的步骤都不一样,所以每次都在尝试.冒险:于是乎,把安装的重要步骤贴出,供自己以后参照. 1.首先要看看 ...
- Linux_内存查询
查询磁盘使用情况: [root@css-management ~]# df -hl 文件系统 容量 已用 可用 已用% 挂载点 Filesystem Size Used Avail Use% Moun ...
- 在项目中使用SQLite数据库小结
------------------------------------------------------------------------推荐: - VS2012 使用 1.0.84 版的库 - ...
- VMware系统运维(十六)部署虚拟化桌面 Horizon View Manager 5.2 配置池
1.点击"添加",打开添加池界面,选择"自动池",点击"下一步" 2.选择"专用,启动自动分配",点击"下一步 ...
- EasyGUI基础教程
安装EasyGUI 教程http://www.cnblogs.com/zym941001/p/5323319.html Helloworld import easygui as g g.msgbox( ...
- 20145102 《Java程序设计》第1周学习总结
20145102 <Java程序设计>第1周学习总结 教材学习内容总结 linux下对于java的安装是非常简便的,只要参照ArchWiki就可以快速安装,没有Windows上那么复杂.I ...
- Linux后台运行
关于linux后台 ctrl + z jobs -l fg %jobnumber 后台调前台 bg %jobnumber 后台暂停--后台运行 kill pid ps -aux | grep &quo ...
- While reading xxx.png pngcrush caught libpng error: Not a PNG file..
While reading /XXX/XXX/XXX/img1.png pngcrush caught libpng error: Not a PNG filCould not find file: ...
- Sublime Text—自带快捷键介绍
前言: Sublime Text是个小巧便捷的编辑器,除了众多好用的插件外,还有它自带的快捷键,打代码事半功倍,不会用的赶紧看看吧! 其实菜单上都有,看不懂可以汉化,Key Bindings-Defa ...