ADO.net入门(一):框架(重中之重)

im, 无色
im, 无色
im, 无色
884
文章
0
评论
2019年8月1日21:46:39 评论 387

废话:说实话,对于平时工作任务重,又兴趣学一门编程的爱好者来说,自学是一个很麻烦的事,它意味着更多的在求知的时间上浪费。

 

ADO.net就是一个看似高深却很浅易的东西,原因是以前看到后就绕道走,没有任何人带很困难。这次终于搞明白了。

 

原因就是:没有搞懂它的框架情况。

 

1、ADO.net是net框架中的一组类。它的目的就是连接数据库获取一些结果集,在程序中进行操作。

 

2、ADO.net它的设计实际很简单,我们要怎么连接到数据库中,去“偷取”一些数据到程序中,然后再进行操作呢?

一、连接到数据库。显然,不连接到数据库我们怎么来操作东西呢?

二、发送SQL命令。连接到数据库后,就要发出指令,是查询还是删除等操作,都由我们发出指令。

三、处理结果集。    指令执行后得到的结果集,怎么来处理。

就上面三条,就是ado.net的核心,如果不清楚这个,就完蛋了。所以光看代码就懂是针对那些知道数据库原理和一些知识的人。

对于我们一穷二白的兴趣控就是灾难。再看一篇上面的三条,对下理解下面非常重要。

 

3、ADO.net的结构图及解说

ADO.net入门(一):框架(重中之重)

重点来了:

根据上面三条:

一、连接到数据库。用的是connection类,它来处理与数据库的连接问题。

          二、发出SQL指令。用的command类,连接后,由它来向数据库发出SQL指令。

          三、结果集的操作。SQL指令会得到结果集,处理结果集用的是两个类(要注意):DataReader和DataAdapter

 

为什么 要用两个来操作呢,用一个不行么?行! 但它们分别有各自的适用范围。正如水管只能用来传送水,消防车用来防火相似一样。 DataReader就象水管一样,一直和数据库连接上(不会断开),因此它每次只能是一个记录(不是多个,尽管结果集是多个),而且一直送水,不能把水倒送到自来水厂一样,它只能对结果集进行“向前的”、“只读的”进行查询。即,这条记录处理完后,再读取一次  ,这次就是下一条记录,就这样读一次,就得到一条记录,而且是向前的,不能倒回读上一条,这和它名字一样“数据数据器”一样,只能读!(图中蓝线部分)

DataAdapter就和上面不一样了,它就是一个“搬运工”,就象一个消防车一样。跑到水厂装上一车,水就变成消防车上的水了,然后开着消防车跑到缺水的用户处,进入放水。如果这水用不完,还可以把水拉到水厂倒回到水厂的水池中。

上面的水厂就是数据库,消防车就是DataAdapter,请再看一篇上面,理解一下过程,否则下面理解不了。

可以看到DataAdapter是和数据库断开的,它会一车一车地把水(结果集)拉到用户这里(至于怎么拉,它会自动处理好的),明显地 它的处理更加灵活:一大容量,很多个结果集(一车水)拉到用户处),二倒回到水厂(数据库),它可以任意查询,删除,修改,对处理后的水(用不完的水)还可以倒回到数据库(水厂),起到更新数据库的作用。(上面红线部分)

再想一下水管(DataReader)和消防车(DataAdapter),只有记住上面的图再看下面。

可以发现消防车(DataAdapter,数据适配器)里面还有一个东西DataSet,这是什么呢?

DataSet就是一个变型的水,水厂的水,会按照消防车水箱的样子变化,水箱是方的,装的水就变成方型,水箱是椭圆的,装的水就是椭圆的。你这不空吹么?它还不是水?是的,为了便于理解,得到水厂的水“变成”我们可以用的水,因为水厂不同,最终都得变成消防车中的水。另外一个就是消防车中的水,可能不是水厂一个池子里的水,可能是多个水池中的水。

唉哟,有点迷糊了。。。。是的,为了理解,就这样表述了。再总的联系一表述一下。

重要:DataSet就是用DataAdapter来装的,即DataSet就是消防车中的水,DataAdapter就是消防车,废话!当然是消防车(DataAdapter)来装水(DataSet)。  消防车(DataAdapter)就是来来匹配不同的水厂(数据库)来装水的,有的水厂管子粗,不用怕,咱消防车上有粗管子可以接水,有的水厂 (数据库,如Orcale)管子细,不用怕,咱消防车是万能的、无敌的!也有细管子,照样接水。它就是万能通,与各个数据库打交道。 然后通过各种管子把水(结果集)变成消防车水,而这水可以直接对用户使用。所以最后消防车中的水箱,它就适合用户的样式(方型还是椭圆)

另外还有一个为啥可以是不同的池子呢?

假定一个池子是一个表,另一个池子是另一个表,两个池子装进消防车,就是这两个表的结果集。比如select *  from  成绩表 a,学生表 b  where a.学生编号=a.学生编号        这就是两个表,它来自于两个池子

 

  4、上面是白话理解,说下“官方”话,官方话只适合有基础和老师的来说,好理解点。

我的原则,只写自己理解的,官方的少用。

DataAdaper数据适配器,就是在数据库与用户间打交道,它适用于和不同的数据打交道,这样,烦杂的工作就交给它去做吧,我们就抽烟等着就行。

DataSet数据集,它由DataAdapter用Fill方法来填充,这样得到的结果我们便于处理。DataSet有很多,有多表的结果集,有行的集合,有约束等

DataReader数据读取器,就一死板的机器人,它会一直和数据库连接着(DataAdapter是获得结果集后就断开,然后把结果集送到本机缓存中),而且它只会一次读取一个。因此可以看到处理结果集的两个方法特点:

DataReader    一直连接数据库,简单,处理速度快(一次才一个记录),不能深入处理复杂的问题(比如不能删除、修改)

DataAdapter     断开式结果集,量大,节约了服务器,加大了本机资源负担,但是,处理更灵活,更深入,复杂的东西就它了!!!

 

5、命名空间:就类似于容器,它限定了同名的类在不同的命名空间(容器)不会出错。

它的好处就是不会混名,且分名别类,更好组织和使用。

用ADO.net一样,我们在使用前也得引用它。

 

System.Data     内存数据的类,主要用于访问数据

System.Data.SqlClient    提供连接到SQLserver,执行指令,读取结果等.

System.Data.OleDb         类似上面,但上面对SQLserver更优化一些(自己产品当然,,,你懂得)

System.Data.SqlTypes  为SQlserver的本机数据类型提供类。使得类型转换等更安全、更快。

乱吐一下:ADO.net类在system.Data.Dll中,并与System.Xml.Dll中的XML类集成。当编译使用System.Data命名空间代码时需要引用System.Data.Dll和System.Xml.Dll,就是上面的命名空间。

 

看下面一个图,叹,为了这个托管转换,从数据库到用户,微软真是用尽办法,看来自动化的过程历程是不容易的。

要是那天连这一层层托管转换变成一个不更好么,有这样的好事么,好像不行,反正我没想出来:)

ADO.net入门(一):框架(重中之重)