数据库基础与ADONE.ppt_第1页
数据库基础与ADONE.ppt_第2页
数据库基础与ADONE.ppt_第3页
数据库基础与ADONE.ppt_第4页
数据库基础与ADONE.ppt_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ASP.NET程序设计教程第8章数据库基础与ADO.NET,河南城建学院计算机科学与工程系,2,概述:,没有数据库的网页,可说完全静态且无法与浏览者产生互动。反过来说,网页结合数据库的好处是让网站“活”起来,不但可有互动,也可节省设计人员的维护时间。但是网页结合数据库的设计,有一定的门槛,重要的是设计人员必须拥有数据库设计经验,尤其是程序设计,因为大部分的应用皆须写程序,没有较佳的辅助工具。,3,概述(续),几乎每一种商用应用程序都依赖于某种数据存储。不论使用的是Excel电子表格、文本文件,还是诸如SQLServr或Oracle这样的关系型数据库管理系统(RDBMS),数据的读取和存储于应用程序的成功至关重要。本章介绍通过ASP.NET和ADO.NET访问数据,您将学习以下内容:什么是数据库?数据库的类型和何时应用数据库。ASP.NET中可用的数据库访问工具。,4,第8章目录,内容概述8.1数据库基本概念8.2在SQLServer2000中使用数据库8.3SQL的数据查询8.4存储过程8.5ADO.NET8.6ASP.NET数据库应用程序开发,5,内容,本章的主要内容包括三方面:一是数据库的基本概念。二是常用的数据库管理系统MicrosoftSQLServer2000的使用要点。三是在ASP.NET中使用数据库的基本技术ADO.NET框架和方法。本章的内容给后续有关数据库操作的章节提供了必要的理论和技术基础。,6,1什么是数据库,简单地讲,数据库是一个信息集合。开发应用程序时可以使用两种数据库。第一种是平面文件。在平面文件数据库中,所有的数据都存储在一个表中。Excel电子表格以及用逗号分隔的文本文件就是平面文件数据库。平面文件适合小型的应用程序,如果需要存储大量的数据或执行平面文件间的查询时,平面文件就无法实现。第二种数据库是关系型数据库。为满足大型企业级应用程序的需要(无论是客户/服务器类型的应用程序还是基于Web的应用程序)。关系型数据库也是表(或平面文件)的集合,只是当两个表包含相同的信息(通常是唯的数字标识符)时,可以将它们关联起来。,7,一些大型的关系型数据库,下面列出了一些大型的关系型数据库:MicrosoftSQLServer;Oracle;Informix;Sybase;MySQL。(SQLServer2000和Access的简单介绍),8,1.2结构化查询语言SQL,SQL概述:要操作数据源中的数据,可以使用结构化查询语言(StructuredQueryLanguage)。SQL几乎是所有大型数据服务器都支持的数据操作语言,它提供一些可以帮我们快速的执行数据查询、更新、删除、插入等数据操作的叙述;要撰写操作数据的应用程序,SQL语言是非常重要的。SQL的用法非常灵活,在这里我们不深入讨论,我们只介绍比较常用的SQL叙述。(注意,以下操作在SQLServer2000查询分析器中进行)结合“毕业设计管理系统”说明。,9,1.Select:,Select语句可以从资料源传回我们所指定的字段,其语法如下所示:Select字段1,字段NFrom数据表名称如果要将所有的字段传回,则可以使用*来代表。例如我们要将数据库:Pubs的employee数据表中的所有字段传回,则使用下列叙述:Select*Fromemployee例如我们想要传回sales数据表中STOR_ID以及ORD_NUM这两个字段的数据,可以使用如下叙述:selectSTOR_ID,ORD_NUMfromsales利用School_bysj_QX库演示,10,利用Where子句来过滤数据,利用Where子句可以过滤记录,其语法如下所示:Select字段一,字段NFrom数据表名称Where条件条件可以是=、=、$5500ANDTYPE=business使用BETWEEN关键字指定范围例:查询出版日期在1/1/199112/31/1991之间的书号和出版日期。Selecttitle_id,pubdateFromtitlesWherepubdateBETWEEN1/1/1991AND12/31/1991,11,使用LIKE关键字进行模糊比较,查询,在查找中,有时候需要对字符串进行比较,使用LIKE运算符可以完成对字符串的模糊匹配。例1:查询所有包含BOOK的店名信息。Selectstor_nameFROMSTORESWHEREstor_nameLIKE%BOOK%例2:查询以B、D或F开头的店名信息。Selectstor_nameFROMSTORESWHEREstor_nameLIKEBDF%利用School_bysj_QX库演示,12,Select语句连接查询:,一次从多个表中查询记录,就需要用到连接查询。1.非限制连接非限制连接是指不带WHERE子句的连接。看下例:selecttitle,pub_nameFROMTitles,publishers(选择了Pubs库中的Titles,publishers两个表)2.自然连接(内结合)自然连接(INNERJOIN)也叫内连接。例:显示每个出版社所出版的书名。selectpub_name,titleFROMTitles,publishersWheretitles.pub_id=publishers.pub_id,13,连接查询(续):,或者:selectpub_name,titleFROMTitlesINNERJOINpublishersONtitles.pub_id=publishers.pub_id3.外结合(外连接:OUTERJOIN)外连接OUTERJOIN允许限制一个表中的行,而不限制另一表中的行。例:显示所有的书名(无销售记录的书也包括在内)。selectT.title_id,title,qtyFROMTitlesT,SalesSWHERET.title_id*=S.title_id注意:上边的句子中包含了表别名T、S,它不会影响最终的结果,但却能简化SQL子句。,14,连接查询(续2):,例句改成如下形式(注意“*”的位置):selectT.title_id,title,qtyFROMTitlesT,SalesSWHERET.title_id=*S.title_id比较两条语句及其显示结果,发现第一例子中有两行数据的QTY是null,第二个例子无NULL.外连接的方法有两种。A*=B包括第一个表A的所有行在内,而不考虑语句限制,称为左结合LEFTOUTJOINA=*B包括第二个表B的所有行在内,而不考虑语句限制,称为右结合RIGHTOUTJOIN,15,2.Insert,Insert可以将新的纪录加入数据源中,其语法如下所示:InsertInto数据表名称(字段1,字段2,.字段N)Values(字段1,字段2,.字段N)在插入数据时应注意以下几个问题:1.输入项的顺序和数据类型必须和表中列的顺序和数据类型相对应。2.要保证表定义的非空列(NOTNULL)必须有值。3.字符形和日期形数据插入时要加单引号括起来。见下页示例:(利用TSGL.DBF)(以下操作在在SQLServer2000企业管理器中进行。),16,Insert的例子:,例如下列指令在图书的分类统计库(fltj)中增加一条记录。INSERTINTOfltj(大类,类名,册数,借出数,款额)VALUES(CC,计算机,500,20,2222.22)数据表后面的字段可以省略。如果省略表示全部的字段都要输入,并且必需按照字段的顺序来输入。INSERTINTOfltjVALUES(CC,计算机,500,20,2222.22),17,3.Delete(删除记录),Delete命令可以删除数据源中的纪录,其语法如下所示:Delete数据表名Where子句特别注意如果没有设定Where子句的条件,则会将所有数据表中的纪录全部删除。见下例,删除分类统计(fltj)表中大类=CCDELETEFROMfltjWHERE(大类=CC),18,4.UPDATE(更新),Update语句可以更新数据源中纪录的数据,其语法如下所示:Update数据表名称Set字段一=新值,.字段N=新值Where子句例如下列语句将图书的分类统计库表(fltj)中“类名”字段为“马列主义”的纪录,将其“马列主义”更改为:“毛泽东思想”。UpdatefltjSet类名=毛泽东思想Where大类=A注意如果没有Where大类=A子句,SQL语句将修改表中所有记录。,19,8.4存储过程,”过程“也称为子程序,存储过程是包含在数据库中的。存储过程被用于不同的数据库中。在SQLServer2000和ACCESS中都使用存储过程,尽管两者创建存储过程的方法不同。在SQLServer2000中创建存储过程:打开“企业管理器”,选中一个数据库和数据库表,选“操作/创建存储过程”菜单。见下页图:提示:SQLServer2000包含了大量内置的存储过程。其大部分都比自己创建的复杂的多。,20,使用存储过程的原因,既然SQL语句自己能够在ASPNET中使用,我们为什么还要创建存储过程呢。主要有下面的因素,其重要性根据不同的应用程序而不同:模块化编程;执行速度快;降低网络流量;提高应用程序的安全性。将SQL语句转换为存储过程,不仅解决了以上所有这些问题,还提供了其它好处,即使是一行SQL语句也将通过转换为存储过程而受益。,21,创建存储过程(1)企业管理器,22,创建存储过程(2)新建存储过程,23,基本语法,创建存储过程的基本语法格式如下:CREATEPROCEDURE参数名数据类型VARYING=默认值OUTPUTWITHENCRYPTION|RECOMPILE|ENCRYPTION,RECOMPILEASSQL语句其中各参数含义(见教材238页),24,基本语法中各参数说明:,参数名:定义存储过程的输入或输出参数。要指定数据类型,多个参数定义要用逗号“,”隔开。在调用存储过程时该参数将由指定的参数值来代替,如果执行时未提供参数值,则使用默认值作为实参,默认值可以是常量或空值(NULL)。OUTPUT:指定此参数为输出参数。VARYING:指定输出参数是结果集,专门用于游标作为输出参数。WITHENCRYPTION:对存储过程进行加密。WITHRECOMPILE:对存储过程重新编译。执行存储过程的基本语法格式如下:EXECUTE,25,存储过程示例一:,例1:创建一个存储过程,该过程返回所有作者以及他们的文章和出版社信息。USEpubs/*使用psbS数据库*/CREATEPROCEDURExp_au_ti_pub_Info/*创建存储过程*/ASSELECTau_lname,au_fname,T.title_id,pub_nameFROMauthorsA,titleauthorTA,titlesT,publishersPWHEREA.au_id=TA.au_idANDT.title_id=TA.title_idANDT.pub_id=P.pub_idGO,26,执行存储过程,可以在查询分析器中调用存储过程,语句如下:USEpubsEXECUTExp_au_ti_pub_Info/*存储过程名*/(在查询分析器中调用)返回的结果为一个表。*也可以在项目Storweb的页面文件中调用存储过程,页面文件名为:Ex81_stor.aspx。事件中的代码见下页。,27,页面文件中的代码,privatevoidPage_Load(objectsender,System.EventArgse)/设置连接串.SqlConnectionobjConn;objConn=newSqlConnection(datasource=(local);initialcatalog=pubs;userid=sa;password=;);SqlDataAdapterobjCommand=newSqlDataAdapter(xp_au_ti_pub_Info,objConn);/存储过程名:xp_au_ti_pub_InfoDataSetDS=newDataSet();/填充数据到Dataset,并将数据集合命名为AuthorInformationobjCommand.Fill(DS,AuthorsInformation);/绑定到表格中MYDataGrid.DataSource=DS.TablesAuthorSInformation.DefaultView;MYDataGrid.DataBind();,28,存储过程示例二(带参数):,例2:创建一个存储过程,通过作者的姓名查找作者以及他们的文章和出版社信息。(带参数)CREATEPROCEDURExp_author_Info/*创建存储过程*/lastnamevarchar(40),firstnamevarchar(20)ASSELECTau_lname,au_fname,T.title_id,pub_nameFROMauthorsA,titleauthorTA,titlesT,publishersPWHEREA.au_id=TA.au_idANDT.title_id=TA.title_idANDT.pub_id=P.pub_idANDau_fname=firstnameANDAU_lname=lastname,29,执行存储过程2,在查询分析器中调用存储过程,语句如下:USEpubsEXECUTExp_author_InfoDeFrance,Michel调用的时候跟参数:DeFrance,Michel返回的结果为一个表。*也可以在项目Storweb的页面文件中调用,页面文件名为:Ex82_stor.aspx。事件中的代码见下页。,30,存储过程示例三:,例3:创建一个存储过程返回某个书店的购买数量。USEpubs/*使用psbS数据库*/CREATEPROCEDURExp_qty_sum/*创建存储过程*/stor_idchar(4),sumintOUTPUTASSELECTord_num,payterms,title_id,qtyFROMSalesWHEREStor_id=Stor_idSELECTsum=sum(qty)FROMsalesWHEREStor_id=Stor_idGO,31,执行存储过程三,在查询分析器中调用存储过程,语句如下:USEpubsDECLAREtotal_qtyvarchar(20)EXECUTExp_qty_sum6380,total_qtyOUTPUTSELECT销售信息=销售总数为:+total_qty(DECLARE语句声明变量),32,2.在ACCESS中创建存储过程,ACCESS也支持存储过程,但将其称为查询。例:打开“FPNWIND.MDB”库,创建一个存储过程:命名为:“查询1”,33,8.5ADO.NET,ASP.NET及其他Web开发语言提供了一套访问数据库的工具,使用这些工具可以连接到数据库,并使用SQL或其他可以同数据交互的工具来操纵其中的数据,在ASP.NET中,ADO.NET是访问和操纵数据库的数据的媒介。ADO.NET的特色ADO(ActiveXDataObject)对象是继ODBC(OpenDatabaseConnectivity,开放数据库连接架构。)之后微软主推存取数据的最新技术,ADO对象是程序开发平台用来和OLEDB沟通的媒介,ADO目前的最新版本为ADO.NET。这是微软公司成功的组件数据存取技术的最新版本,让开发人员可以同市场上几乎任何一种数据库进行交互。,34,使用ADONET定义数据库访问,使用ADONET时,数据库访问是由名称空间System.Data、System.Data.SQLClient和System.Data.OleDb定义的。要使用ADO.NET来访问数据库,需要将这些名称空间导入到应用程序中。后面将逐个对这些名称空间进行更详细的讨论。现在,您要了解以下几点:System.Data是通用的名称空间,其中包含组成ADONET核心体系结构的所有类。System.Data.Oledb名称空间供ADO.NET管理提供程序访问支持OleDb的数据源时使用。System.Data.SQLClient名称空间供SQLServer管理提供程序使用。该名称空间是专为MicrosoftSQLServer而设计的,对于以前版本的SQLServer,可以提高其性能。,35,.NETFramework数据提供程序的4个核心对象,.NETFramewor数据提供程序包含了Connection,Command,DataReaderDataAdapter这4个核心对象,这些对象之间的关系如图8.14所示。,36,37,ADO.NET架构,ADO.NET对象可以让我们快速简单的来存取各种数据。传统的主从式应用程序在执行时,都会保持和数据源的联接。但是在某些状况下和数据库一直保持联接是不需要的,而且一直保持和数据源的联接会浪费系统资源。有些时候我们只需要很单纯的将数据取回,这时候就不需要保持对数据源的联接。ADO.NET被设计成对于数据处理不一直保持联接的架构,应用程序只有在需要取得数据或是更新数据的时候才对数据源进行联接的工作,所以应用程序所要管理的联接减少;数据源就不用一直和应用程序保持联接,负载减轻了效能自然也就提升。不过我们的应用程序也有些情况需要和数据源一直保持联接;此时我们还是可以使用ADO对象和数据源随时保持联接的状态。,38,39,这4个核心对象的功能如下:,1)Connection:建立与特定数据源的连接2)Command:对数据源执行数据库命令,用于返回数据、修改数据、运行存储过程以及发送或检索参数信息等。3)DataReader:从数据源中读取只进且只读的数据流。4)DataAdapter:执行SQL命令并用数据源填充DataSet。DataAdapter提供连接DataSet对象和数据源的桥梁。DataAdapter使用Command对象在数据源中执行SQL命令,以便将数据加载到DataSet中,并使对DataSet中数据的更改与数据源保持一致。,40,ADO.NET名称空间,.NET框架的命名空间(NameSpace)它包含了应用程序将会使用的动态链接库。ADO.NET命名空间提供了多个数据库访问操作的类,图8.15列出了SQLServer.NETFramework数据提供程序和OLEDB.NETFramework数据提供程序的类结构。命名空间System.Data提供了ADO.NET的基本类;System.Data.Oledb提供了为OLEDB数据源或SQLServer6.5及更老版本数据库设计的数据存取类;System.Data.SqlClient提供了为SQLServer7.0及更新版本数据库设计的数据存取类;,41,42,在ASP.NET应用程序中访问数据库,在ASP.NET应用程序中访问数据库,需要在程序开始处引入相应的命名空间。例如在程序中访问SQLServer2000,需要使用以下语句:如果使用VisualBasic.NET编写代码,需要使用以下语句:ImportsSystem.DataImportsSystem.Data.SqlClient如果使用VisualC#.NET编写代码,则需要使用以下语句:usingSystem.Data;usingSystem.Data.SqlClient;,43,从图8.15中可以看出,不同的数据提供程序的命名空间下提供了不同的访问数据库的类。例如SQLServer数据库常用的类位于System.Data.SqlClient命名空间下,用于SQLServer7.0或更高版本的数据库操作。表8.7列出了SQL数据库常用的类。,44,表8.7SQL数据库常用的类,45,其他数据提供程序的类与此相似。另外,ADO.NET还提供了数据集及相关类。这些类构成了DataSet对象模型。这些类可以构建内存数据库。一个DataSet就是一个内存数据库。创建一个DataSet后,就可以将代表数据表的多个DataTable对象添加到DataSet中。而DataTable可以通过SqlDataAdapter或OleDbDataAdapter对象来创建。通过DataRelation对象可以定义DataSet中表与表之间的关系,而通过DataView则可以实现DataTable的数据过滤和排序。,46,VS.NET数据控件,作为一个功能强大的IDE(集成开发环境),VisualStudio.NET提供了使用方便的快速开发工具,其中包括VS.NET数据控件。VS.NET的数据访问控件位于“工具箱”的“数据”工具箱中,如图8.16所示。,47,图8.16VS.NET的数据访问控件,48,从图8.16可以看出数据库访问控件和ADO.NET命名空间中的相应类存在着对应关系,OleDbConnection、OleDbCommand、OleDbDataAdapter属于OLEDB类控件,SqlConnection、SqlCommand、SqlDataAdapter属于Sql类控件。在VS.NET中DataReader类没有对应的可视化控件,因此若程序中使用DataReader类访问数据库,必须编写相应的代码。,49,ADO.NET数据访问策略,ADO.NET的数据访问策略有两种一是将数据记录缓存于数据集(Dataset)中。二是直接访问数据库并使用数据读取器(DataReader)来读取数据记录。那么,应用程序应使用Dataset还是DataReader呢?此时应考虑应用程序所需要的功能。见示例项

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论