1.有关ADO.NET和数据库操作浅谈
闲着没事干,但坐在电脑前又不知道干啥,突然想写一些东西,由于大脑里还是混沌的,所以就瞎侃一下吧!
前几天,我们的C#课程学到了ADO.NET与数据库操作这一章,我对这一章非常重视,因为我以前或多或少的没事的时候粗略浏览了一下C#中有关ADO.NET和数据库操作的知识,但因为走马观花,对它还是很生疏。我自己从内心里知道,ADO.NET是学习C#和进行大型应用程序开发的基础,也是重中之重。没有ADO.NET,大型的网站开发都只是简单的网页制作,毫无实用可言。
我曾经粗略的看过网上有关.NET开发的视频,视频里讲的东西都是全都面向就业,面向社会的实用性的东西,对我们在学校的对编程语言的学习不能说帮助不大,但也有很大的帮助。我清楚地记得那里面的讲师的一个思想,那就是:只会拖控件的程序员永远都是菜鸟!因为.NET中的控件非常的多,非常的繁杂。我在学习的过程中也发现了这样的问题,即使我们对一个控件用的再好,用的再熟,换一种情况,换一个环境,你就又傻眼了,再者说,.NET中那么多的控件,你能研究完吗?还有微软每年开发出那么多的控件方便开发人员进行软件开发,你能做到微软开发出一个控件你就又去埋头钻研吗?你不累吗?如果你买一本.NET的书看一下,你就会发现,这本书的第一页讲的是控件,第一百页讲的是控件,第五百页讲的还是控件,见到这样的书,我奉劝一下和我一样热衷于.NET编程的好孩子,别买这样的书,真的很垃圾!你看过你拖的控件内部实现代码了吗?少则上百行,多则成千上万行。知道你的C#连接数据库的程序为什么反应那么慢吗?知道河大选课系统一到选课的时候为什么那么卡吗?那就是只会拖控件的菜鸟程序员拖出来的!只有知道了控件内部的实现原理,你才能应对于.NET中各种操作,即使微软开发出再多的控件,你也能应对与程序需求的千变万化之中!
我才开始学ADO.NET的时候,总是不想写对数据库操作的代码,对数据库操作的五步:1.创建SqlConnection实例。2.创建SqlCommand实例。3.打开连接。4.执行命令。5.关闭连接。这五步,我到现在才烂熟于心,说起来真的很惭愧啊!我自己对这五步的理解是:1.创建SqlConnection实例(SqlConnection conn=new SqlConnection("数据库连接字符串");)就是创建一个数据库连接对象,就好比国家要修一条公路或者学校要建一栋大楼,创建SqlConnection对象就是要把数据库连接给建起来,也就是要把公路或者大楼修好,但这只是建好一个连接,修好一条公路,把大楼给盖好,如果国家没准许新修建的公路投入使用,你敢开着车上路吗?说不定翻到哪个旮旯里去了!如果学校没说教院餐厅边的新盖好教学楼投入使用,你敢进去上自习吗?所以现在该进行第2步了,别急,还没到公路和教学楼开放的时候,外部条件都具备了,你自己也得有内部条件啊。第二步就是创建SqlCommand对象(SqlCommand cmd=new SqlCommand("sql语句",conn);),这个东西就好比你要去公路开车,你得有车吧,去新盖的教学楼上自习你得带书吧,SqlCommand对象就是提供对数据库进行操作的方法,比如对数据库的增删改查操作,sql语句就是要传递给SqlCommand对象。好了,万事俱备,只欠东风了。下面进行第3步:打开数据库连接(conn.Open();),也就好比国家出文件或学校通知新盖的教学楼说这条公路或者教学楼可以投入使用了,这是就可以开着车到新路上去兜风了,距离新盖的教学楼近的同学也不用走那么远的路到综合楼上自习了,多好,嘿嘿!下一步就是执行数据库操作命令了,SqlCommand提供了三种对数据库操作的方法:ExecuteNonQuery();ExecuteScalar();ExecuteReader();这三种方法实现的都是对数据库的操作,你可以调用它们三者中的任何一种,但要注意一点,它们的返回值不一样。ExecuteNonQuery();方法返回的是对数据库操作所影响的行数,用于sql语句为insert,delete,update的场合;ExecuteScalar();方法返回的是数据库操作结果的第一行第一列的值,方便用于查询结果为一个值的情况,如sql语句中count,max,sum等语句;ExecuteReader();方法返回的是一个结果集,也就是SqlDataReader对象,SqlDataReader对象的指针指向该结果集的第一行,通过SqlDataReader对象的Read()方法每次读取一行,该指针是不回头的。通过反编译我发现其实ExecuteScalar();方法在内部也调用了ExecuteReader();方法,然后读取它的第一行第一列,实在是繁琐至极,微软封装这样的方法只是方便我们程序员理解和调用而已,但是也增加了程序的内部冗余度!现在该执行最后一步了,就是关闭数据库连接,就是调用conn.Close();方法关闭数据库连接,然后再调用conn.Dispose();方法毁灭该链接(也许这个词用的有点不恰当,嘿嘿,就是该数据库连接不存在的意思)。注意Close();方法只是关闭数据库连接,并没有毁灭,还可以再打开。但Dispose();方法就是毁灭数据库连接了,就是一条公路或投入使用的教学楼不仅关闭了还给炸毁了,想开放也没法开了。毁灭性数据库连接无法再打开,只有重新创建数据库连接对象才能打开了!在这里,我想说一下using( ){ }的作用,using后面的小括号是创建有关数据库操作对象,执行完大括号里的内容后就会毁灭数据库连接,等同于执行Dispose();方法,在大括号里不需要调用关闭或毁灭数据库连接等方法。
好啦,今晚就写到这里,实验室要关门了,我该回去了。
有关SqlDataAdapter,DataTable,DataSet,以及强类型数据集以后再有感而发!
待续......