ADO.NET

 source:http://www.cnblogs.com/hssl/archive/2008/10/23/1315796.html

在上篇文章中说了程序对数据库的操作后,我们通常要返回操作信息.例如:返回受影响的行数或者返回查询的数据.SqlDataReader可以对返回的数据进行操作,但只是只读的,而且必须要保持连接才行.那么能不能更灵活的对返回的数据操作呢?答案是肯定的.

既然我要对返回的数据进行灵活的操作,那么我们是不是要搞个东西来存放这些数据.要不然程序得到数据库里的数据后放哪?我们用什么来存放这些数据呢?有个类叫做dataset官方的解释叫做:表示数据在内存中的缓存.看这个解释多少对我来说多少有点茫然.我个人把它通俗理解为:可以把数据存在里面,而这些数据是以在内存中的形式存放的.也就是说不是放在硬盘上的.好了,dataset既然可以存放数据,那么我们把从数据库中返回的数据存放进去到dataset里就行了.这个过程其实就是程序从数据库里得到数据,然后把数据放到dataset对象中,而dataset属于程序里的东西,当然程序就得到了这些数据.从另一个角度也可以说:程序从硬盘上(数据库数据其实存放在硬盘上的)得到数据,然后把得到的数据放到内存中(dataset对象存在于内存中),并且程序能对这内存中的数据进行操作.现在我们知道了dataset可以作为存放数据的容器,那么dataset为什么能存放呢?那我们就自然的联想到了dataset的内部"结构".

dataset其实相当于一个小型的数据库,只不过是在内存中的.我们知道sqlsever数据是关系型的数据库,里面有一张一张的表,表里可以存放数据,而表与表之间又有着联系.这叫关系型数据库.而dataset就类似一个关系型的数据库.对比一下,dataset里也会有一张一张的表,表与表之间也可以存在一定的关系.现在就知道了dataset有两大部分组成.就是表与关系.表就是datatable了,关系就是Relation.当然一个dataset里可以有很多表(datatable),所以才产生表与表之间的关系,如果只能有一个表,那也不存在表与表之间的关系了.那么现在我们来看看表(datatable),datatable其实就是存放数据的地方.表嘛形象的想象成表格.那么表格由什么来组成呢?大家都知道行(row)和列(column).由于一个表(datatable)可能有很多行很多列,所以在datatable里把所有的行统称为:rows(行的集合),所有的列统称为:columns(列的集合).具体每一行每一列叫什么呢?具体的一行叫:DataRow.具体的一列叫:DataColumn.泛泛的说:在datatable中很多的DataRow在一起统称为:rows;很多的DataColumn在一起统称为:columns.现在知道了datatable中有行和列,是不是仅此而已呢?非也!其实还存在一个数据库中也有的东西,叫做:约束(Constraint).datatable的约束都有些什么呢?有两个,一个叫做唯一键(UniqueConstraint),一个叫做外键(ForeignKeyConstraint).唯一键就是说,这个列被设为唯一键后,这列的每行数据是唯一的了,不能重复.就像数据库里自动增长的id.举个例子我们把身份证好就需要设成唯一键,因为不能重复嘛.外键是什么意思呢?和数据库里讲的是一个意思.举个例子,有两张表,第一张表里有个id字段是主键啊,这个id也是第二张表的一个字段,那么我们就可以把第二张表中的id字段设为外键了.现在第一张表里的一个id数据改了第二张表也相应的要改.这样的形式就叫外键.

好了,上面基本说了dataset的内部构成了,总结如下:

dataset由datatable(表)和Relation(表之间的关系)组成,而datatable由DataRow,DataColumn和约束组成.约束有,唯一键和外键两种.

既然dataset简直就像个小型的关系型数据库,那么我们肯定能在里面存放数据.现在我们用代码来说明如果在dataset里存放数据.

我们知道了dataset的内部构成,我们只要把里面的"零部件"一个一个装上就行了.首先,我们需要创建dataset对象,然后再创建datatable对象,想要几个表就创建几个datatable.此时把创建好的datatable对象装到dataset里.现在有了dataset,dataset里也有了datatable,我们再把datatable里加上列和行并填充上数据就可以了.那么我们是先创建datatable中行还是列呢?我们想想在sqlserver数据库里我们建一个表,先要干什么?当然是先设置字段,字段也就是列啊,字段设置好了我们表就建好了,接下来往里加数据就行了.同理,在datatable里我们要先设置字段,也就是列,然后就创建行,而创建行的过程其实也就是往里加数据的过程.

我们来看看下面的代码

此代码创建个dataset,然后用gridview去绑定到dataset里的datatable上.我们在dataset里面放两个datatable,分别用两个gridview绑定啊.

 

Code1

上述代码就详细说明了如果构建一个dataset,并绑定到gridview上.但是我们只是简单的对于datatable中数据的填充.现在我们要求table1中id列为唯一列怎么做?还有当我把table1中的一个id值改变了,那么table2中的table1_id的值也要相应的改变.(table1.id=table2.table1_id),这个又怎么做?那么就要对于datatable中的约束进行处理了.

我们先看看如何设置一个唯一键,看如下代码:

Code2

上面代码就说明了如何添加一个约束(唯一键),当我们设置好唯一键后就不能对唯一键的列中的数据进行随意修改了,当然是不能改为已经有的数据了.

列如:tabal1中有两行,第一行id的值为1,第二行id的值为2,我们就不能把第一行的id改为2了,显示第二行也不能改为1了.改成其他的数值当然是没问题的.

忘了讲怎么改datatable中的数据,很简单ds.Tables["table1"].Rows[0][0] = 3,就表示让ds中的表table1的第0行第0列等于3.datatable中行与列都是从0开始的.当然通过ds.Tables["table1"].Rows[0][0]也可以到第0行第0列的值.

我们看如下一段代码:

Code3

上面代码,就可以对tabal1的第0行第0列进行修改了,当然第0行第1列.....都可以修改.你可以用两个textbox分别用来输入行号与列号的.......

当我们未把id列设为唯一键时候(也就是未点那个设唯一键的按钮),我们可以对ds.Tables["table1"].Rows[0][0]任意赋值的,当然要是数字才行.而当我们点击设为唯一键后,就不能任意的改数值了.改成2就会报错,因为2已经存在了,唯一键要求不能重复的.所以我们搞个try..catch语句来处理异常.错误信息为:列“id”被约束为是唯一的。值“2”已存在。

下面我们再来看看约束中的外键,当我们改动tabel1中的id值的时候,table2中的table1_id也要相应改变,因为它们是相等的.那么此时我们只要在table2中把table1_id设为外键就行了.这样tabel1中的id值变了,table2中的table1_id也就跟着变了.

如何设置外键呢,看下面代码:

Code4

上面代码就设置了外键,运行后发现,改了tabel1中的id值,table2中的table1_id也就跟着变了.

好了罗嗦到现在,对于dataset里的datatable介绍很多了,而dataset里的关系(表与表的关系)有什么用呢?另外我们发现像这样的GridView1.DataSource = ds.Tables["table1"].DefaultView代码,gridview对于datatable的绑定为什么要有个DefaultView这个东西,当我们直接用GridView1.DataSource = ds.Tables["table1"],也没问题的.那DefaultView究竟是什么呢?带着这些疑问我们下回再说.

如有错误请及时指正,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值