数据集的使用方法和技巧

数据集概述

1.1数据集

l         是一种代表关系数据的内存驻留结构

l         是以XML 形式表示的数据视图,是一种数据关系视图。

l         在Visual Studio 和.NET Framework 中,XML 是存储和传输各种数据时所用的格式。因此,数据集与XML 有密切关系。

1.2数据集分类

– 类型化数据集

–     非类型化数据集

1.3类型化数据集和非类型化数据集的区别

结构体系

功能类型

检测

类型化数据集

类型化数据集这样一种数据集,它先从基DataSet 类派生,然后,使用XML 架构文件(.xsd 文件)中的信息生成新类。架构中的信息(表、列等)被作为一组第一类对象和属性生成并编译为此新数据集类。

可以直接通过名称

引用表和列

在VS.NET中可以智能感知元素的类型

非类型化数据

非类型化数据集没有相应的内置架构。与类型化数据集一样,非类型化数据集也包含表、列等,但它们只作为集合公开。

需要通过Tables集

合引用列

不能感知

1.4 数据集的属性

重点:

– Tables

–     Relations

创建数据集和数据表

2.1创建数据集:

– 设计时创建非类型化数据集

工具箱“数据”

–     运行时创建非类型化数据集

2.2 创建数据表

• 数据表属性

–最重要的集合:

• Columns

• Rows

• Constraints

• 给数据集添加数据表

[参考代码]

//创建数据集

DataSet ds = new DataSet("myDS");

DataTable dsMaster = new DataTable("master");

DataTable dsChild = new DataTable("child");

ds.Tables.Add(dsMaster);

ds.Tables.Add(dsChild);

2.3 为数据表添加列

• Columns集合属性

• 为数据表添加列

2.4 为数据表添加行

• Rows属性

• Rows.Add方法

– Add(DataRow):向数据表中添加指定的数据行

• 为数据表添加行

[参考代码]

//添加列

ds.Tables["master"].Columns.Add("masterID", typeof(Int32));

//添加行

DataRow dr = ds.Tables["master"].NewRow();

dr["masterID"] = "";

ds.Tables["master"].Rows.Add(dr);

//修改表头

ds.Tables["master"].Columns["masterID"].Caption = "主ID";

2.5 为数据表添加约束

• ForeignKeyConstraints属性:保证两个数据表之间对应行改变时的关系

• UniqueConstraints属性:保证某列数据在每行都不相同

• 在运行时为数据表添加约束

–添加外键约束:修改一个表的值看是否变化

–添加唯一键约束

2.6 为数据集添加关系

• Relations:定义数据表之间的关系,该集合中可以包含0个或者多个数据关系对象,每个对象表示

两个表之间的关系

• 只有数据集的EnforeConstraints属性设置为true时,DataRelation中建立的约束才会被强制执行

• 为数据表添加数据关系(非类型数据集)

[参考代码]

//添加唯一键

System.Data.UniqueConstraint uc = new UniqueConstraint("唯一键名称",ds.Tables["master"].Columns["masterID"]);

//添加外键

System.Data.ForeignKeyConstraint fc = new ForeignKeyConstraint("外键名称", "主表列", "从表列");

//添加关系

ds.Relations.Add("关系名","父表列","子表列");

//注意关系和外键的区别

if (ds.Relations.Count <= 0)

return ;

System.Data.DataRow dr = ds.Tables["master"].Rows[0];

System.Data.DataRow[] drArray = dr.GetChildRows(ds.Relations[0]);

//这里的区别在于 外键:如果主表列更新,则从表列都对应更新

//关系:能够从父表对应的一列,获取子表对应的行集

2.7 显示行状态

• 数据行的RowState属性反映了自数据表创建以来或者上次更新后在数据表上采取的操作

• DataRowState的取值

• 显示状态行

[参考代码]

//显示行状态

DataRowState drs = ds.Tables["master"].Rows[0].RowState;

数据操作

3.1数据集方法

– 克隆数据集:只复制结构

DataSet.Clone ();

– 复制数据集:复制结构和数据

DataSet.Copy ();

3.2数据表方法

– Select方法:用于在运行时过滤数据表的行并进行排序。它不对表的内容作改动。该方法只是返回与指定的规则相匹配的行数组

//返回DataRow[]集合

DataSet.Tables["master"].Select(“条件”,”排序规则”);

数据集内的筛选与排序

在填充数据集之后,通常会发现使用表中的不同记录子集或以不同顺序查看数据很有用。可以通过对数据集内的数据进行筛选和排序来实现这一点。若要简化此过程,可以创建数据视图,数据视图提供可合并筛选器和排序条件的对象,可用作数据绑定的源

数据集内的筛选与排序

可改用内置的数据集功能来筛选和排序。有两个选择:

• 数据表支持Select 方法,您可调用该方法来筛选和排序。该方法并不更改表中记录的内容和顺序,相反,它向您提供一个记录列表(或数组)表示所指定的条件。

• 可以使用数据视图(DataView 对象)。数据视图是一个对象,它作为数据表之上的层,提供经过筛选和排序后的表内容视图。(还可以使用数据视图管理器,它的行为像数据视图集合。)数据视图类似于数据库中的视图,因为它不是数据的副本。相反,它只是查看表中数据的另一种方式。

4.1 数据视图概述

• 数据视图是位于数据表之上的独立对象

• 数据视图是对单一数据进行过滤和排序后的视图

• 可以用作绑定控件的数据源

• 可以为一个数据表创建多个数据视图

• 视图数据行实际引用了数据行的DataRowView对象

DataRowView的属性

属性

描述

DataView

该数据行视图所属的数据视图

IsEdit

表示该数据行视图是否正在被编辑

IsNew

表示该数据行视图是否为新建

Item

该数据行视图中某列的值

Row

正在被查看的数据行

RowVersion

该数据行视图的当前版本

4.2 创建数据视图

• 在设计时创建

–创建类型化数据集

–从工具箱“数据”中选择“DataView”控件

• 可以使用表的DefaultView 属性来访问该默认数据视图,该数据视图返回一个

DataView 对象。可在运行时设置默认数据视图的属性。

4.3 数据视图的属性

• 数据视图属性

– RowFilter

– RowStateFilter

– Sort

• 使用表的Select 方法或数据视图的RowFilter 属性,可以筛选数据表中的记录以便仅使想操作的记录可用。这在要操作数据集表中记录的不同子集时很有用。若要指定筛选器条件,可以使用与创建列表达式所用语法相同的表达式语法。

[参考代码]

//RowFilter判断

string tempid = this.lbdid.Text.ToString();

bookView.RowFilter = "id='" + tempid + "'";

if (bookView.Count==1)

{

Response.Write("<script langusge='javascript'>alert('。。。');</script>");

return;

}

//RowStateFilter判断

DataView dwMain = (DataView)Session["cart"];

dwMain.RowFilter = this.tbCon.Text;

switch (ddlState.SelectItem.Value)

{

case "CurrentRows":

dwMain.RowFilter = DataViewRowState.CurrentRows;

break;

case "OriginalRows":

dwMain.RowFilter = DataViewRowState.OriginalRows;

break;

case "Added":

dwMain.RowFilter = DataViewRowState.Added;

break;

case "Unchanged":

dwMain.RowFilter = DataViewRowState.Unchanged;

break;

case "ModifiedCurrent":

dwMain.RowFilter = DataViewRowState.ModifiedCurrent;

break;

default:

break;

}

数据列表达式

• 是一个字符串,可以使用任何一个普通字符串处理函数来生成

• 算术运算符:+,-,*,/,%

• 比较运算符:AND,OR,<,>,<=,>=,<>

– IN:确定指定值是否包含在一个集合中

• myExpression= “myColumnIN ( ‘a’,’b’,’c’)”

– Like:用通配符进行模糊匹配

• 函数

4.4 数据视图的方法

方法

描述

AddNew

向数据视图中添加一个新的数据行视图

Delete

从数据视图中删除一个数据行视图

Find

根据指定的主键查找包含该主键的数据行视图

Find方法

• 按指定的排序关键字值在DataView 中查找行。

[参考代码]

//向数据视图添加行

DataRowView drv;

drv = dwMain.AddNew();

drv[".."] = "..";

//省略,不需要再Add

//删除

dwMain.Delete(dwMain.Count - 1);

//更新

dwMain[dwMain.Count - 1]["列名"] = "";

//查找,返回检索行数

dwMain.Find("关键字");

数据集实用技巧

• EXCEL和DataSet

[参考代码]

//注意添加名字空间using System.Data.OleDb;

#region 从Excel导入DataSet

string strConn = "Provider=Microsoft.Jet.OLEDB4.0"+

"Data Source="+strFillName+";"+

"Extended Properties =Excel8.0";

OleDbDataAdapter ExcelDa = new OleDbDataAdapter("select * from [sheet1$]", strnConn);

DataSet ExcelDs = new DataSet();

try

{

ExcelDa.Fill(ExcelDs, "excelInfo");

}

catch(Exception err)

{

//进行错误处理

}

#endregion

#region 从DataSet导入Excel

//首先要添加COM组件:添加引用-Com组件-Microsoft Excel 11.0-选择'确认

Excel.Application excel = new Excel.Application();

int rowIndex = 1;

int colIndex = 0;

excel.Application.Workbooks.Add(true);

System.Data.DataTable tb = ds.Tables[0];

foreach(DataColumn col in tb.Columns)

{

colIndex++;

//获取列名称

excel.Cells[1, colIndex] = col.ColumnName;

}

foreach (DataRow row in tb.Rows)

{

//添加数据

rowIndex++;

colIndex = 0;

foreach (DataColumn col in tb.Columns)

{

colIndex++;

excel.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString();

}

}

excel.Visible = false;

excel.ActiveWorkbook.SaveAs(....);

excel.Quit();

excel=null;

GC.Collect();//垃圾回收

#endregion

• XML和DataSet

[参考代码]

DataSet ds = new DataSet();

//Schelma尽量要单独载入,否则解析效率很低

ds.ReadXml("...");

ds.WriteXml("..");

• BLOB和DataSet

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=905064

转载于:https://www.cnblogs.com/ufo0303/archive/2006/08/18/480539.html

数据集的使用方法和技巧相关推荐

  1. UltraWebGrid控件在开发ASP.NET项目中的使用方法和技巧(转)

    摘  要 本文主要阐述了UltraWebGrid 2005控件在实际项目开发中的应用,这里以大庆石化公司炼油厂生产调度系统为例详细描述了UltraWebGrid控件的原理以及它的使用方法和技巧,还特别 ...

  2. 【笔记】机器翻译学术论文写作方法和技巧(作者:清华大学 刘洋)

    文章目录 [笔记]机器翻译学术论文写作方法和技巧 1 论文发表流程 2 解决问题 3 审稿过程 4 全新全意为读者服务 5 标题的写法 6 摘要的写法 8 介绍的写法 9 段落的写法 10 图和表的重 ...

  3. 怎么判断网络回路_PLC控制回路故障的判断和检修方法与技巧!

    点击蓝字 关注我们 有时我们关注的公众号消息比较多,错过了一些自己喜欢的消息,不能及时看到工控论坛的推送,我们可以给公众号加星标或置顶.那如何星标置顶呢?[打开一篇工控论坛公众号的文章,点击文章标题下 ...

  4. JavaScript的方法和技巧

    摘自http://www.cnblogs.com/Jamedy/archive/2007/02/14/650079.html 有些时候你精通一门语言,但是会发现你其实整天在和其它语言打交道,也许你以为 ...

  5. 软考程序员Java答题速成_软考程序员考试试题解答方法与技巧

    如果说程序员考试解上午题无技巧可言的话,那么解下午题就是70%的实力加30%的方法与技巧,若运用到极致的话,会是"四两拨千斤".下面就来看一下程序员下午题解题步骤和解题技巧,以供考 ...

  6. win10共享打印机怎么设置_小编为你叙述 win10系统网络共享理光打印机的设置方法的技巧介绍 -win10使用教程...

    大家在操作win10系统电脑的过程中,经常会遇到小编为你叙述 win10系统网络共享理光打印机的设置方法的技巧介绍 的情况,相信有太多的用户是不愿意遇到小编为你叙述 win10系统网络共享理光打印机的 ...

  7. 如果去掉数学前后的空格_理综+数学+地理+英语完型的方法和技巧

    有的同学已经开学了,突然之间面对考试.面对老师的提问,有很多人都感觉自己大脑空白,什么都回答不上来,今天明德君就为大家整理思科的知识点和技巧,帮助大家快速恢复记忆,决胜开学的测试! 一.理综 首先需要 ...

  8. linux下gdb调试方法和技巧详解

    linux下gdb调试方法和技巧整理 简介 UNIX或者UNIX-like下调试工具 启动gdb # 1. 在可执行程序不需要输入参数时,我们可以使用 gdb + 可执行程序 gdb ./typeid ...

  9. skyline TerraBuilder 制作MPT方法与技巧(2)(转自)

    本文转自:http://www.cnblogs.com/cannel/p/3622811.html 制作MPT的方法可以看这里<skyline TerraBuilder 制作MPT方法与技巧(1 ...

最新文章

  1. iOS 用自签名证书实现 HTTPS 请求的原理实例讲解
  2. 注意稳住或慢抬离合,给车辆一些缓冲,才能平顺起步。抬得太快,
  3. php composer 缓慢,php – 下载Laravel时,Composer非常慢
  4. php中常用的全局变量有,在PHP中如何使用全局变量的方法详解
  5. 阿里大牛总结:学会这些Kafka知识,吊打面试官就是分分钟的事
  6. 冒泡排序java jsp_冒泡排序实现原理
  7. scala编程第17章学习笔记(2)——集和映射
  8. cvCalcEMD2() 直方图匹配
  9. 训练AI 玩王者荣耀,这算不算开挂?!(附源码)
  10. 分治——线性时间选择算法
  11. 西安大略电子与计算机工程专业,2020年西安大略大学电子与计算机工程(工程科学硕士, 工程硕士)专业硕士申请条件-学费-世界排名...
  12. android studio连接本地SqlServer数据库报网络错误
  13. 【ChatGPT】多国“围堵”,万人抵制,AI发展的红线到底在哪?
  14. 现在开一间网吧还能挣钱么?
  15. Android .9
  16. 相对熵(KL散度)计算过程
  17. RAID磁盘阵列详解and软阵列(raid0,raid1,raid5,raid1+0 热备盘)配置实验
  18. rabbitmq系列(三)消息幂等性处理
  19. 解决vue/es6语法低版本安卓手机显示白屏的兼容性问题
  20. 【软工】 概论 过程和生命周期建模

热门文章

  1. python 爬虫代理
  2. panda.read_csv的常用参数说明
  3. [数分提高]2014-2015-2第4教学周第1次课
  4. SQlite-数据库的访问实例(转)
  5. 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。
  6. WebConfig自定义节点并读取
  7. 几种支持REST的Java框架
  8. 汽车电子及ADAS安全部分相关测试标准
  9. 资源推荐 | TensorFlow电子书《FIRST CONTACT WITH TENSORFLOW》
  10. 优雅地提高 React 的表单页面的开发效率