严重注意:下述内容可能完全错误,我只是乱理解一翻便于自己记忆。不能作为任何网友的参考,那便是严重误人子弟了!
希望有懂的人看到后能告诉我真正的原理。谢谢!
对数据库的操作貌似是程序员必须要掌握的知识,也是绝大部分的项目中要用到的知识。在.net框架下程序与数据库之间的互操作称为:ADO.NET。
也做过一些项目,对于程序与数据库的操作,也会用。不明白的地方上网搜一下,查查资料,再把高手写的代码照复制下来照葫芦画瓢是了。这样也满足了一般项目的开发。但是一段时间不用后,又忘了,再去看看代码是怎么搞的,再照葫芦画瓢。至于ADO.NET中的一些细节并不是十分的清楚。这样就有个问题,感觉是全凭记忆去写的代码,而对于为什么代码这么写并不知道。也就是说,看例子代码是这样一行一行排下来,我也这样一行一行排,代码究竟是什么原理并不清楚。所以常常一段时间后又忘了。很想去理解代码的意思,但是无论是买书看,还是上网查资料,总是看的不是很明白。可能是自己太笨的原因,看一些书籍和资料总觉得对于知识点的介绍太过于晦涩,有时努力看了半天也看不懂,就产生了排斥心理,看不下去了。所以有时不是我们不想去学习,而是努力学了却学不会,我想这也是困扰很多人的一个问题。本人就是这样的一个笨人,花了很多功夫可能还没搞明白那是什么意思。
好了,言归正传。现在我就用我自己的理解方式来表达ado.net了,理解的肯定是有很多错误的,但是便于我理解记忆。只要用到项目中没问题就行了,理解错误就错误吧。
首先我们要清楚程序是程序,数据源是数据源。这是两个不同的东西。程序不能像处理自己一样去处理数据源,因为数据源相对于程序来说是外界,不属于程序本身的范围。所以程序要想处理数据缘可能需要个接口之类的。程序通过接口去处理数据源。(也可能不是接口,我瞎猜是接口的)
什么是数据源?通俗的解释就是能按一定规律存储数据的一个东西。最最常见的是数据库。当然还有其他的数据源比如xml,也是最近很火暴的。
现在我们以c#语言 ,sqlserver2000数据库,vs2005工具开始探讨ado.net。
对于sqlsever数据的操作要用System.Data.SqlClient名称空间
刚才讲了程序与数据库是两马事,那么就不能直接处理数据库中的数据。那程序怎么去处理数据库呢?很简单啊,“外交”。程序首先和数据库联系上,也就是建立一个连接。程序和数据库建立个“外交关系”就可以和数据库取得沟通了。程序怎么和数据库建立关系呢?c#中有个类叫:SqlConnection,它是专门负责和sql数据库建立联系用的。和哪个数据库联系,需要什么信息等都是SqlConnection负责的。这些信息就组成了连接字符串。好了现在我们有了和数据库连接的一个类了,就可以和数据库连接上了。当然我们不仅仅是要连接上,最终目的是要对数据库里的数据进行操作的。对数据库里数据的操作无非,增、删、改、查,四种方式。我个人认为(实际情况我也搞不清,不知道哪有资料能查到)程序不会直接操作数据库里的数据的,而是发送一个sql命令给数据库,由数据库自己完成操作。那么当我们和数据库连接上后,怎么发送一条命令给数据库呢?就通过c#里的SqlCommand类,这个类就负责把命令封装好,然后送到sqlsever数据库中。数据库接到SqlCommand通知后就得到了要执行的命令,数据库按命令执行后再把反馈信息给SqlCommand的。反馈的消息可能是执行的行数、或者结果集。当SqlCommand得到数据库反馈的信息后,程序也就完成了与数据库的一次操作。
简单看下过程:
1,首先程序通过SqlConnection与数据库连上
2,通过SqlCommand传递命令给数据库
3,数据库执行命令后将执行的信息反馈给SqlCommand
也就是说SqlConnection是专门和数据库连接的;SqlCommand负责发送命令给数据库并得到执行结果的。这两个类都属于连接类。打个不准确比喻就像:有A,B两个厂,A厂现在想要B厂的产品。那么A厂先修条路到B厂,然后派个带有产品订单车子去B厂,车子通过修的那条路开到B厂,B厂接到车子送来的订单后开始做产品,做好后装到车子上。那么A厂就得到想要的了。(A厂就是程序,B厂就是数据库,路就是SqlConnection,车子就是SqlCommand)
那么下面我们看看代码中到底是怎么写的。
先看这段代码
(以Northwind数据库为例子,据说这个数据库就是个例子,可以任意的动)
1//sql语句
2string strSql = "select top 10 city from Customers ";
3
4//创建一个连接(设备)
5SqlConnection cn = new SqlConnection();
6//指定是连到哪个数据库以及其他连接信息
7cn.ConnectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
8
9//创建一个发送命令的东西,并指定用哪个连接以及其他信息
10SqlCommand cmd = new SqlCommand(strSql, cn);
11cmd.CommandType = CommandType.Text;
12
13//和数据库连上
14cn.Open();
15
16//发送命令
17//cmd.ExecuteNonQuery();
18//cmd.ExecuteReader();
19//cmd.ExecuteScalar();
20//
21