登陆注册
8724600000026

第26章 软件构造(5)

6.4.1ADO.NET的定义

ADO.NET是托管应用程序所使用的数据库语言。它是.NET框架类库的System.Data命名空间和它的子空间提供的一组类。前面提到编程实际上就是管理和操作数据,而ADO.NET就是为管理和操作数据而生的。接下来就一起来探讨如何使用ADO.NET。

6.4.2使用ADO.NET

ADO.NET是.NET框架类库System.Data命名空间中的一组类。它包括了Connection对象、Command对象、DataAdapter对象、DataReader对象、DataSet对象及其他一些辅助对象。

首先先来看一下主要对象有些什么功能和作用。

Connection对象:建立与特定数据源的连接。

Command对象:对数据源执行命令。

DataReader对象:从数据源中读取只能单向前进且只读的数据流。

DataSet对象:DataSet是ADO.NET结构的主要组件,它是从数据源中检索到的数据在内存中的缓存。Data Set由一组Data Table对象组成,使用者可使这些对象与Data Relation对象互相关联。DataTable和Data Relation会在下文中有所介绍。

Data Adapter对象用数据源填充Data Set并解析更新。当然,还有一些很常用的对象,如Parameters对象和Command Builder对象。

Parameters对象定义命令和存储过程的输入、输出和返回值参数。而Command Builder对象将自动生成Data Adapter的命令属性或将从存储过程导出参数信息并填充Command对象的Parameters集合。这些对象究竟如何工作会在下面的文字中叙述。

若要在数据库中执行操作,应执行SQL语句或存储过程(它包括SQL语句)。可以使用SQL语句或存储过程读写行并执行聚合函数,例如添加或求平均值;还可使用SQL语句或存储过程创建或修改表或列、执行事务等。

在ADO.NET中,使用数据命令打包SQL语句或存储过程。例如,如果想要从数据库读取一组行,则创建一个数据命令并用SQLSelect语句的文本或获取记录的存储过程的名称配置它。所有使用ADO.NET与数据库进行交互,不管是显式的还是隐式的,都会牵扯到连接和命令对象。连接对象代表和数据库的物理连接;命令对象代表对数据库执行的命令操作。

这里给出了在ADO.NET中执行数据库命令的规范操作模式,规范操作模式如下。

①创建一个封装连接字符串的连接对象。

②调用连接对象的Open方法打开连接。

③创建一个封装SQL命令和连接的命令对象。

④调用命令对象的方法来执行该命令。

⑤调用连接对象的Close方法关闭连接。

下面提出几个能帮助大家解决数据库交互的操作:

1.如何设置数据库连接

在操作数据库之前,必须打开一个指向它的连接,由SqlConnection类代表了指向SQL Server数据库的连接。在Sql Connection类中有一个属性Connection String,存储了连接字符串。下面的语句创建了一个Sql Connection对象,并用一个连接字符串初始化。

Dim My Connection As New SqlConnection

My Connection.ConnectionString=”server=( localhost);database=ComponentSystem;Trusted_Connection=yes”)

只是创建一个Connection对象和提供一个连接字符串并没有打开一个指向数据库的物理连接,调用对象的Open方法才可能做到这一点。当然,在调用完数据库后别忘了用close方法关闭数据库。如果不能建立一个指向数据库的连接,SqlConnection.Open就会引发一个SqlException异常。

Try

My Connection.Open()

//TODO使用此连接

catch(ex as Sql Exception)

finally

My Connection.Close()

End Try

2.如何插入数据

一个打开的指向数据库的连接如果不用来执行命令就失去了意义,下面就来说一下命令类SqlCommand。SqlCommand实现了一些方法,可以调用这些方法来执行命令,如果是查询命令,会得到一个封装结果的DataReader对象。调用的方法和返回的结果取决于所要执行的命令。举例来说明:

Dim My Command As SqlCommand

My Command=New Sql Command(”Insert into tb_ClassBase(ClassId,ClassBaseID)values(+ClassID+,+lblBaseID.Text+)”,My Connection)

My Command.Execute NonQuery

当然还可以用命令对象的Command Timeout属性来指定命令执行的超时时间。

My Command.Command Timeout=10//保持连接10秒

Execute Non Query方法用来执行Insert、Update、Delete和其他没有返回值的SQL命令,它返回被命令影响的行数。ExecuteScalar方法执行一个SQL命令并返回结果集的第一列的第一行,它一般都用来执行SQL的COUNT、AVG、MIN、MAX和SUM函数,这些函数都是返回单行单列的结果集。

3.如何删除数据

同理定义一个命令对象SqlCommand。举例来说明:

Dim My Command As SqlCommand

My Command=New SqlCommand(”Delete from tb_Author where tb_Author=12”,_My Connection)

My Command.Execute NonQuery

4.如何更新数据

也同样是定义一个命令对象Sql Command。举例来说明:

Dim My Command As SqlCommand

My Command=New Sql Command(”update tb_componentbasicinformation set componentintroduction="”+txtcompintro.Text+”",componentcategoryid="”+category+”",toolid="”+tool+”",producttypeid="”+ product+”",componentfunctionid="”+funct+”",functionintroduction="”+txtfuncintro.Text+”"where componentid="”+lblcompid.Text+”"”,MyConnection)

My Command.Execute Non Query

5.如何查询数据

用来压轴的方法是Execute Reader,不为别的,因为它的使用频率最高。它能很快地对数据库进行查询并得到结果。ExecuteReader返回一个Data Reader对象,它可以作为一些数据类控件的数据源。一个查询操作可能产生几百万条记录,但是可以使用DataReader只读取其中的10条,这样只有部分结果集被返回,提高了性能。

下面是一个把从数据库中查询出来的数据作为一个下拉框控件的数据源的例子。先定义了一个名为sql的SQL查询字符串,然后建立一个Sql Command命令对象,并把刚才定义的sql作为参数传入Sql Command对象。接下来就是执行Execute Reader方法,得到一个DataReader对象。

sql=”Select producttypename From tb_producttype”

cmd=New SqlCommand(sql,conn)

rd=cmd.ExecuteReader

ddlprodtype.Items.Clear()

Do While rd.Read

ddlprodtype.Items.Add(rd(”producttypename”))

Loop

rd.Close()

ADO.NET的DataReader对数据库查询结果的基于流的访问,在只读记录集中只能以向前方式移动。用户不能退回去重读前一条记录,也不能改变查询结果并把它们写回数据库。于是,ADO.NET提供了基于集的访问。基于集的访问把整个查询结果记录在内存的缓存中,我们可以从任意方向访问并随意作出修改。

基于集的访问类是DataSet,它相当于内存中的数据库。而实际的数据存储在DataTable里,它是内存中的数据表。相对应的还有Data Row和Data Column。

DataSet通常是通过数据库查询或者XML文档来初始化的。DataSet不与数据库直接交互,而是由DataAdapter完成这项工作。

DataAdapter最重要的方法是Fill和Update。前者查询数据库并对结果初始化Dataset,后者把更改写回到数据库。

先给出一个例子:

Dim MyConnection As Sql Connection

Dim MyCommand As Sql DataAdapter

MyConnection=New Sql Connection(”server=( localhost);atabase=Component System;Trusted_Connection=yes”)

MyCommand=New Sql DataAdapter(”select AuthorID,AuthorName from tb_Author”,MyConnection)

Dim ds As DataSet

ds=New DataSet()

MyCommand.Fill(ds,”tb_Author”)

Mydatagrid.DataSource=ds.Tables(”tb_Author”).DefaultView

Mydatagrid.DataBind()

这段代码完成了很多工作。传递给DataAdapter的构造函数的查询字符串对指定的数据库执行查询;在Dataset中创建一个名为tb_Author的表;用数据库中的tb_Author表的架构初始化Data Table;检索由查询产生的所有记录,并把它们写入Data Table中;关闭指向数据库的连接。

在DataTable中执行插入、更新和删除操作并不会自动写回数据库。如果想把更改写回数据库必须手动完成。

Dim myConn As New SqlConnection(myConnection)

Dim myDataAdapter As New SqlDataAdapter()

myDataAdapter.SelectCommand=New SqlCommand(mySelectQuery,myConn)

Dim custCB As SqlCommandBuilder=New SqlCommandBuilder(myDataAdapter)

myConn.Open()

Dim custDS As DataSet=New DataSet

myDataAdapter.Fill(custDS)

myDataAdapter.Update(custDS)

myConn.Close()

CreateCmdsAndUpdate=custDS

至于Update怎样更新数据库的,在这里就不单独叙述了。在这里要提醒一点,在用SqlDataAdapter进行大量数据库的更新操作时,如果想提高性能,应该将数据库的更新操作编写在存储过程中,将这些存储过程包装在SqlCommand对象里,然后把这些对象赋值给InsertCommand、UpdateCommand或DeleteCommand属性。ADO.NET也支持视图概念。用DataView表示。它支持排序和筛选,可以用DataView的sort属性或rowFilter属性。那么有人也许要问,什么时候使用DataReader,而什么时候又该用DataSet呢?

在以下场合下考虑使用DataReader。

①当应用程序要求优化只读以及前向数据访问(如绑定Repeater控件)时,DataReader是一个更好的选择。当数据从DataReader“卸下”来时,就关闭连接,这对提供程序的性能有帮助。

同类推荐
  • 创业在微软

    创业在微软

    身处软件巨擘微软之中,何来“创业”二字?本书详尽勾勒了微软亚洲工程院(ATC)的成长历程,披露了工程院人在“创业”过程中不为人知的种种酸甜苦辣,生动展现了工程院的独特文化,并从另一个角度展现了其领袖人物张宏江博士的心路历程和管理思想。
  • 组态软件控制技术

    组态软件控制技术

    监控组态软件是完成数据采集与过程控制的专用软件,它以计算机为基本工具,为实施数据采集、过程监控、生产控制提供了基础平台和开发环境。本书从应用角度出发,详细介绍了组态软件应用程序的开发过程。对窗口界面编辑、动画链接、实时和历史趋势、安全机制、I/O设备连接,以及生产应用等内容都做了非常详细的介绍。MCGS是优秀的监控组态软件之一,它功能强大、使用方便,可以非常容易地实现监视、控制、管理的各项功能,并可提供软、硬件的全部接口,方便、快速地进行系统集成,构成不同需求的数据采集与监控系统。本书可作为高等学校计算机应用、自动控制、电子技术、机电技术专业的教材,同时还可作为相关专业工程技术人员的自学用书。
  • 初级会计电算化

    初级会计电算化

    本书是作者根据历年会计从业资格考试的考试大纲以及多年对真题的分析,并结合多为专家、学者的实践经验而编写的。本书主要分为八套模拟试卷,以对考生考前的学习进行模拟实战,达到提高考生成绩的目的。
  • Delphi程序设计教程

    Delphi程序设计教程

    本书为适应不同层次读者的需要,从Delphi的基本知识讲起,由浅入深,全面讲述了Delphi的集成开发环境、Delphi的编程语言——ObjectPascal、常用组件的使用、窗体的设计、菜单的设计、对话框的设计、多文档界面程序的设计、多媒体编程和数据库应用程序设计等内容。
  • 音视频合成制作

    音视频合成制作

    本书共分4篇6章,其中第1篇简介音视频合成的编导基础,第2篇主要介绍SonyCinescore1电影音乐自动合成,第3篇主要介绍Vegas7.0音视频剪辑合成,第4篇主要介绍AdobeAudition2.0、CakewalkSONAR6和SteinbergNuendo3的音视频合成。本书可以作为音乐、美术、动画、舞蹈、影视、戏剧等艺术院校视听艺术合成制作课程的教材,也可以作为相关人员的自学用书。
热门推荐
  • 都市囚神典狱长

    都市囚神典狱长

    班盈本以为自己是个失败的魔术师,却没想到自己老爹是正八经的魔法师,还管理着一座魔法师监狱。当典狱长职位作为老爹遗物落到他的头上,一个小魔术师将如何面对一群奇形怪状的囚犯?爽文,带脑,有常识。又名《客厅战争》。
  • 踏道洪荒

    踏道洪荒

    踏破青山人未在,蓦然回首已成仙。这是一个穿越重生的故事,这是一个为爱寻道的故事。
  • 帝女重生之唯我独尊

    帝女重生之唯我独尊

    神马?我堂堂校花级女神在遇车祸后重生了?灵力?帝女?我亮瞎你们的眼,灵力测试上撑爆水晶球,炼器,炼药,驯兽,我都会,啥?受伤了?姐上辈子可是神医!!风,火,水,土,影五系全能灵师,天下之大,唯我独尊!
  • 那年六月的雪

    那年六月的雪

    “人生最痛苦是莫过于牵手,因为牵手之后还要放手。”那放手后的痛苦应有谁来承受?……
  • 血色战痕

    血色战痕

    强者如云的世界,一切以实力为尊,当失去家族的庇护,身负血仇的他将如何应对?
  • 古今注

    古今注

    本书为公版书,为不受著作权法限制的作家、艺术家及其它人士发布的作品,供广大读者阅读交流。
  • 愿再无岁月可回首

    愿再无岁月可回首

    这么多年来,他们始终在我心里,被时光掩埋。本书不单单是讲一个女孩子的成长故事,她的身上凝聚90后孩子们从懵懂到青春期再到成熟的复杂的青春时光。有欢笑,有感伤,有叛逆,有甜蜜。看到自己曾热爱却正在遗忘的人和事,找到内心的归属。时光时光你走慢点,愿岁月回首看看那些最美时光。
  • 如此喜欢你最后变成了你

    如此喜欢你最后变成了你

    以小艾为视角展开的生活,,她是一个傲娇强硬但不失可爱的女孩。在这看似平平无奇的生活里,其实也能找到许多令人喜悦和难过的事情。
  • 乞丐丫头的霸道男

    乞丐丫头的霸道男

    她是他在无意中捡回家的乞丐丫头,谁知自己却被这乞丐丫头迷得失去了自我……我好好的台港贵族大学艺术系的尖子生,居然莫名其妙的穿来了一个不知名的时空,还遇上了一个不讲理的“臭男人”。
  • 我本天才奈何变废

    我本天才奈何变废

    唐睿——一个从出生便是传奇的存在。唐睿也完美的诠释了什么是主角。修炼?咱睡觉都能秒杀天下英才了好吗?唐睿是这样告诉承天大陆的人的。机缘?唐睿则表示,咱出生便有神器相随,出门落难有龙马救起,遇见高手有神秘强者相助,一生从未遇到半分危险。人缘?更抱歉,父亲是大陆超级强者,母亲是大陆富豪。作为继承了父母优良血脉的唐睿,从小就被莺莺燕燕环绕,无数承天大陆女神拜倒在唐睿脚下。而就是这么传奇的唐睿被调换了魂魄,成为了一个父母双亡,天资巨差,长相平凡的少年。化为凡人的唐睿能继续谱写属于自己的传奇吗?能夺回属于自己的一切吗?一切尽在此书中!