



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C#下数据库编程(一)前言: 曾几何时,OO语言大家族中又多了一位新成员,他有个坚强、锐利而又不失好听的名字,C#(读做C Sharp)。C#由Microsoft一手打造,更重要的是其总设计师就是Turbo Pascal、Delphi的缔造者、天才的Anders。记得在一次C#的演示会上,Anders和Microsoft的主管人员曾立下壮志,要让C#取代VC+,成为今后.NET开发的首选语言。但后来的许多负面的议论也不免让人对这个C#表示怀疑,有人说C#就是JAVA的翻版,几乎没有什么自己的特点,还有人说C#效率低下,而且和VB.NET有很大类同,根本就没有意义推出,不久就会下台并最终死亡,等等。我们也不禁怀疑起来,C#真的这么命短?真的会与JAVA没有什么大的交锋就英年早逝?两年多过去了,这种议论大部分已经随着事实不攻自破。C#不但没有死亡,而且有着超乎寻常的生命力,正在用他锋利的语言利剑,让世人真正领教了什么叫做系出名门、天生立志。在.NET平台开发上,C#已经成为无可争议的首选语言,更令人吃惊的是,这个人称与JAVA雷同的仿制品语言却不知道为什么,一步步在蚕食JAVA的地盘,令JAVA的缔造者已经开始感到不安,更让JAVA的使用者或多或少有些动摇。大约1年前,我接触到了C#,并且试着以我一贯审视IT界发展的眼光去审视他。通过一些日子的学习与体会,我确实感觉这个语言的不平凡性,特别是他充分利用了.NET的优势和特点,并有VS.NET的完美集成于.NET开发平台中。在我长年开发的数据库领域,我试着用C#结合ADO.NET开发了一些项目。现借这个机会,和读者们一起分享C#开发数据库的快乐。正文: 如果你以前用过Visual Foxpro开发数据库项目,你就会有这种体会,VFP对数据库的操作,还是一种对数据库文件的操作,比如: OPEN DATABASE MyDatabase &打开数据库MyDatabaseUSE MyTable &打开数据库中的MyTable表GO 5 &将Cursor跳到第5条记录REPLACE MyName WITH 杨扬 &用杨扬替换第5条记录上的MyName字段GO BOTTOM &将Cursor跳到最后一条记录LOCATE FOR MyName=杨扬 &查找并定位IF FOUND()? FOUND!ELSE? NOT FOUND!ENDIFUSE &关闭MyTableCLOSE DATABASE MyDatabase &关闭数据库MyDatabase这段小程序可以说是VFP中比较简单的一段小程序了,但非常有代表性。从这段程序我们可以感觉到,在VFP想操纵一个数据库中的一个表需要许多类似文件的操作,比如:打开数据库、打开表、跳转Cursor、读取字段内容、查找字段内容、关闭表、关闭数据库等等。这些操作虽然直观易懂,但十分不方便使用,而且如果同时有多个表打开,经常会出现表的轮换访问的问题,就需要不断的切换表的工作区,十分的麻烦和容易出错。最关键的是,这种操作方法不符合OO思想的精华-封装。 如果您熟悉OO编程思想,或者曾经有OO设计经验,您可能会和我一样这样想,如果一个数据库就是一个对象,所有的操作、信息都通过方法(Method)、属性(Attribure)、事件(Event)提供出来,供开发者使用,那该多好啊。C#正是借助基于这种思想设计的数据库访问技术ADO.NET,并提供了一系列方便实用的类。应用这些数据库访问的类,您就可以轻松、准确而且是面向对象的操纵数据库中的各种数据了。如图,这就是C#中提供的数据库访问ADO.NET的结构图。从这张图中,我们可以清楚的了解到ADO.NET的数据访问技术的架构。ADO.NET支持SQL Server数据访问和OLE DB数据访问。两者相比,前者是针对SQL Server的数据库访问引擎,所以访问SQL Server数据库效率会高许多,但只支持SQL Server。后者是比较通用的数据库访问引擎,可以支持广泛的数据库,但效率不如前者。对开发者来说,如果不用到某种数据库的特性,其大体使用方法是一致的。上述内容指数据库的连接部分,也就是上图中的Connetion对象。Connection对象提供了与具体数据库的连接方式,具体你是用SqlConnection对象还是OleDbConnection对象,这个根据你的数据库类型由你选择而定,下面的叙述中,为了不占用过多的篇幅,在无特殊内容的地方,不再分开叙述。 下面给出两段典型的数据库连接的例子。在此之前,请在程序头部using处添加using System.Data.SqlClient或System.Data.OleDb,以保证数据库访问时用到的命名空间能引用SQL Server数据访问string strConn=Integrated Security=SSPI;Initial Catalog=MyDatabase;Data Source=YY-POWERPC ;SqlConnection myConnection = new SqlConnection (strConn);myConnection.Open();OleDb数据访问String strConn=Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=MyDatabase;Integrated Security=SSPI;OleDbConnection myConnection=new OleDbConnection (strConn);myConnection.Open();上述步骤执行后,如果没有异常抛出,便可成功完成与数据库的连接。在完成了与数据库的连接后,接下来就是建立一个DataAdapter对象,来完成可访问数据库的工作。DataAdapter的工作是后面DataSet的基础,其内容就是建立一个DataSet与数据库的中间层,来协调访问。由于DataAdapter与DataSet的关系十分紧密,我就结合在一起介绍了。DataAdapter也分为SqlDataAdapter和OleDbDataAdatper两种。下面给出一段典型代码(OleDbDataAdapter的情况可类推):SqlDataAdapter myDataAdapter = new SqlDataAdapter ();DataSet myDataSet = new DataSet ();string strCom = SELECT * FROM 会员信息表;myDataAdapter.SelectCommand = new SqlCommand (strCom,myConnection);SqlCommandBuilder myCB = new SqlCommandBuilder (myDataAdapter);myDataAdapter.Fill (myDataSet,会员信息表);这段代码用到了SqlDataAdapter、DataSet、SqlCommand、SqlCommandBuilder四个对象。从上图中可以看出,SqlDataAdapter的作用就是负责与数据库的通讯访问,同时与DataSet相连,它的内部有四个很重要的Command对象(同样分为SqlCommand和OleDbCommand),都是访问数据库必用的,分别为SelectCommand、InsertCommand、UpdateCommand、DeleteCommand对象。这些Command对象便是专门用来完成对数据库的查询、插入、更新、删除操作,它们就像四个大臣,在DataAdapter的控制下分别主管各自的事情。其中SelectCommand是它们四个中的老大,由它可以自动的构造生成另外的三个。构造生成的过程就是应用CommandBuilder。在这之前,我们只需要指定DataAdapter中的SelectCommand对象,就可以了。在设置好了SQL Select语句后,就可以开始填充相应的数据集了。方法是应用DataAdapter的Fill方法,参数为DataSet及其中的某个DataTable。这里要着重讲一讲DataSet对象。如果你用过ADO中的Recordset对象,你可能会感觉到DataSet和Recordset的差别。Recordset一般只能应用于单表,即一个Recordset对应于一张表。而DataSet中有一个DataTableCollection,即一个DataTable集合,可以包含多个DataTable对象。DataTable对象看上去就更加像一张表了,其中有DataRowCollection、DataColumnCollection、ConstraintCollection。它们分别代表DataRow(数据行)、DataColumn(数据列)、Constraint(约束关系)的对象集合。可能说这么多,你已经有点儿迷糊了,先看一句代码吧。myDataSet.TablesMyTable.Rows3MyName = 杨扬;怎么样?是不是一下子就明白了许多。这是一句多么完美的OO思想表达出的语句啊!这句就是将DataSet下的一个名为MyTable的虚表中的第4行的MyName字段的内容改为杨扬。为什么叫虚表呢?这是因为ADO.NET的一个特点就是脱机连接数据库。这样可以减少网络通讯的压力,提高效率。你可能会问DataColumn在哪呢?Rows3就表示了第4行记录,换句话说Rows3就是一个DataRow对象,一加上MyName就自动定位到了MyName字段的内容。ADO.NET规定,访问表中内容必须是先行后列的原则,ColumnMyName3是不允许的。当然,DataColumn也是什么重要的,比如想查看某列的列头(Field),可以用Col
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理学:请护工的三大重要理由
- 江西省吉安永新县联考2025年初三下五校联考英语试题含答案
- 天津市津南区2025年初三高中数学试题竞赛模拟(二)数学试题含解析
- 团风县2025年五下数学期末质量检测试题含答案
- 江西省鹰潭市达标名校2025年初三5月检测试题(三)英语试题含答案
- 上海师范大学《文化遗产学理论教学》2023-2024学年第一学期期末试卷
- 台州科技职业学院《文学概论(2)》2023-2024学年第二学期期末试卷
- 辽宁省丹东市第六中学2025届初三下学期中考考前质量检测试题三(5月模拟)物理试题含解析
- 江西枫林涉外经贸职业学院《俄语》2023-2024学年第一学期期末试卷
- 长沙职业技术学院《景观快题训练》2023-2024学年第二学期期末试卷
- 2025年高考作文备考之十大热点主题及写作导引
- 2025届上海市浦东新区高三二模英语试卷(含答案)
- 开曼群岛公司法2024版中文译本(含2024年修订主要内容)
- 【MOOC】航空燃气涡轮发动机结构设计-北京航空航天大学 中国大学慕课MOOC答案
- 工程变更通知单ECN模板-20220213
- 酸洗磷化线材项目建议书范文
- 装修行业资源整合主材合作协议
- 储油罐施工专业技术方案
- (完整版)冲压模具设计毕业设计.doc
- 橡胶接头、防水套管、伸缩器、伸缩接头、传力接头、补偿器、鸭嘴阀等管道工程图形符号大全
- 员工工作调动单
评论
0/150
提交评论