第8章数据库应用8.1数据库基础8.2ADO.NET概述8.3创建连接8.4Command对象与DataReader对象8.5DataSet对象与DataAdapter对象8.1数据库基础8.1.1数据库和数据库管理系统1.数据库基本概念数据库(Database,简称DB),顾名思义,就是存放数据的仓库,其特点是数据按照数据模型组织,是高度结构化的,可供多个用户共享并且具有一定的安全性。8.1.1数据库和数据库管理系统2.数据库管理系统打开数据库管理器(SQLServerManagementStudio)如图8.1所示(图中的数据库是后来添加的)。字段名“XH”打开的“XS”表字段类型数据库“XSCJ”主键“XH”8.1.2表和视图1.表(Table)表是在日常工作和生活中经常使用的一种表示数据及其关系的形式,例如表8.1就是一个学生情况表。学号姓名专业名性别出生时间081101王林计算机男1990/10/01081102王巍计算机女1991/02/08081103林滔通信工程男1990/04/06081104江为中通信工程男1990/12/088.1.2表和视图2.视图(View)视图是从一个或多个表(或视图)导出的表。视图与表不同,它是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。视图一经定义以后,就可以象表一样被查询、修改、删除和更新。使用视图具有便于数据共享、简化用户权限管理和屏蔽数据库的复杂性等优点。8.1.3用VS2010创建数据库和表1.创建数据库用VS2010创建数据库的步骤如下所示:(1)打开VS2010→打开“服务器资源管理器”窗口→右击“数据连接”→选择“创建新SQLServer数据库”选项,如图8.2所示。选择此项8.1.3用VS2010创建数据库和表(2)在“创建新SQLServer数据库”对话框中选择要连接的服务器名→输入新的数据库名→单击“确定”按钮,如图8.3所示,系统添加了一个数据库。选择服务器输入数据库名“XSCJ”8.1.3用VS2010创建数据库和表2.创建表用VS2010创建表的步骤如下所示:(1)打开“服务器资源管理器”窗口→展开刚添加的数据库“XSCJ”→右击“表”→选择“添加新表”选项,如图8.4所示。选择此项8.1.3用VS2010创建数据库和表(2)给新表设计字段和字段类型,设计后右击“XH”→选择“设置主键”选项,XH被设置为新表的主键,如图8.5所示。设为主键8.1.3用VS2010创建数据库和表(3)关闭窗口→保存对表格的修改,在弹出的选择名称对话框中输入“XS”,单击“确定”按钮,XS表就新建成功。以同样的方法创建KC(课程)表,表的结构如图8.6所示。8.1.4结构化查询语言(SQL)SQL运算符除了AND(与),OR(或),NOT(非)逻辑运算符,以及,=,,=,比较运算符外,还可使用下列运算符。BETWEEN:指定运算值范围。LIKE:格式相符。IN:指定记录。SQL语言中,条件子句除了可以使用常规函数外,还可使用下列函数。AVG:求平均值。COUNT:计数。SUM:求和。MAX:求最大数。MIN:求最小数。8.1.4结构化查询语言(SQL)表8.2列出了常用的SQL命令及其相应的功能,表8.3列出了常用到的一些SQL子句,这些命令和子句经过一定的组合,可以创建一个SQL语句,用于完成数据库操作功能。命令分类功能SELECTDML根据查询条件查询数据表INSERTDML向数据表中插入记录UPDATEDML更改数据表的记录DELETEDML删除数据表的记录CREATEDDL创建一个表、字段或索引ALTERDDL添加一个字段或改变一个字段的定义DROPDDL删除一个表或索引子句功能FROM指定要操作的数据表WHERE指定查询条件GROUPBY指定分组条件HAVING指定在一个查询中每一个组的条件ORDERBY指定查询的排序8.1.4结构化查询语言(SQL)1.SELECT语句一个典型的SQL查询可以从指定的数据库表中“选择”信息,这时就需要使用SELECT语句执行。它的最简单形式是:SELECT*FROMtableName其中,星号(*)用来指定从数据库的tableName表中选择所有的字段(列)。例如,若要查询Course表中所有记录,则可用下列语句:SELECT*FROMCourse若要从表中选择指定字段的记录,则将星号(*)用字段列表代替,多个字段之间用逗号分隔,例如:SELECTcourseno,credit,coursenameFROMCourse8.1.4结构化查询语言(SQL)执行的结果如图8.7所示,可以看出查询的结果记录集合(简称为“结果集”)中的字段顺序是由SELECT语句中的字段顺序决定的。8.1.4结构化查询语言(SQL)2.WHERE子句在数据表查询SELECT语句中,经常还需要使用WHERE子句来设定查询的条件。它的一般形式如下:SELECTcolumnl,column2,…FROMtableNameWHEREcondition例如,若将Score表中成绩(score)在80分以上的记录查询出来,则可使用下列语句:SELECTstudentno,scoreFROMScoreWHEREscore=80WHERE子句中的条件可以包含(小于)、(大于)、=(小于等于)、=(大于等于)、=(等于)、(不等于)和LIKE等运算符。其中,LIKE用于匹配条件的查询,它可以使用星号(*)和问号(?)等通配符,星号(*)表示可以出现0个或多个字符,问号(?)表示该位置处只能出现1个字符。例如:SELECT*FROMScoreWHEREstudentnoLIKE'21*’8.1.4结构化查询语言(SQL)3.ORDERBY子句在数据表查询SELECT语句中,若将查询到的记录进行排序,则可使用ORDERBY子句。如下面的形式:SELECTcolumnl,column2,…FROMtableName[WHEREcondition]ORDERBYcoll,col2,…ASC或SELECTcolumnl,column2,…FROMtableName[WHEREcondition]ORDERBYcol1,col2,…DESC8.1.4结构化查询语言(SQL)4.INNERJOIN语句INNERJOIN的最简单形式是:SELECTcolumnl,column2.…FROMtable1INNERJOINtable2ONtablel.columnName=table2.columnNameINNERJOIN将tablel和table2表进行内联,其联接的条件由ON子句设定。通过ON子句指定这两个表中的哪些列进行比较,从而确定最终需要合并的记录。例如:SELECTScore.studentno,Score.courseno,Course.coursename,Score.scoreFROMScoreINNERJOINCourseONScore.courseno=Course.coursenoORDERBYstudentno,courseno8.1.4结构化查询语言(SQL)5.INSERT语句INSERT语句用来向表中插入一个新的记录。该语句的常用形式是:INSERTINTOtableName(coll,col2,col3,…,colN)VALUES(vall,va12,val3,…vaIN)其中,tableName用来指定插入新记录的数据表,tableName后跟一对圆括号,包含一个以逗号分隔的列(字段)名的列表,VALUES后面的圆括号内是一个以逗号分隔的值列表,它与tableName后面的列名列表是一一对应的。需要说明的是,若某个记录的某个字段值是字符串,则需要用单引号括起来。例如:INSERTINTOStudent(studentno,studentname)VALUES(’21010503’,’张小峰’)8.1.4结构化查询语言(SQL)6.UPDATE语句UPDATE语句用于更新表中的数据。该语句的常用形式是:UPDATEtableNameSETcolumnl=valuel,column2=value2,…,columnN=valueNWHEREcondition该语句可以更新tableName表中一行记录或多行记录的数据,这取决于WHERE后面的条件。关键字SET后面是以逗号分隔的“列名/值”列表。例如:UPDATEStudentSETstudentname=‘王鹏’WHEREstudentno=’21010503’8.1.4结构化查询语言(SQL)7.DELETE语句DELETE语句用来从表中删除记录,其常用形式如下:DELETEFROMtableNameWHEREcondition该语句可以删除tableNam表中一行记录或多行记录,这取决于WHERE后面的条件。例如:DELETEFORMStudentWHEREstudentnoLIKE'210105*’将Student表中所有以210105开头的学号的记录删除。8.1.5数据访问命名空间1.System.Data该命名空间是由ADO.NET(ActiveXDataObject,ActiveX数据对象)类组成的,它是托管应用程序中主要数据访问方法。ADO.NET组件能够有效地管理来自多个数据源的数据,并为分布式应用程序中的数据进行请求、更新和协调提供相应的工具。2.System.Data.Common该命名空间包含由.NET框架中数据提供程序共享的类,用于在托管空间中访问数据源,旨在给开发人员提供一种方法以编写将作用于所有.NETFramework数据提供程序的ADO.NET代码。3.System.Data.Odbc该命名空间用于在托管空间中访问ODBC(OpenDatabaseConnectivity,开放数据库连接)数据源。8.1.5数据访问命名空间4.System.Data.OleDb该命名空间用于OLEDB(OLEDataBase,OLE数据库)数据源的连接、执行命令以及读取等。OLEDB试图提供一种统一的数据访问接口,并除了处理标准关系型数据库中的数据之外,还能处理包括邮件数据、Web上的文本或图形、目录服务(DirectoryServices)以及主机系统中的IMS和VSAM数据。OLEDB提供一个数据库编程COM(组件对象模型)接口,使得数据的使用者(应用程序)可以使用同样的方法访问各种数据,而不用考虑数据的具体存储地点、格式或类型。5.System.Data.SqlClient该命名空间用于SQLServer7.0及以上数据源的连接、执行命令以及读取等。它与System.Data.OleDb命名空间类似,但它为访问SQLServer7.0及更高版本进行了优化。8.1.5数据访问命名空间6.System.Data.SqITypes该命名空间用于为SQLServer内部提供内部安全、快捷的数据类。7.System.Data.OracleClient该命名空间用于Oracle数据源的连接、执行命令以及读取等。8.System.Xml该命名空间用于支持XML数据的处理。8.1.5数据访问命名空间【例8.1】根据上面介绍创建数据库,命名为“STUINF”,用于记录学生信息,包括记录学生信息表,表名为“Student”,记录学生课程成绩表,表名为“Score”以及记录课程的表,表名为“Course”,使用SQL语句插入、更新和查询记录(在第一部分使用界面方式创建数据库和表,在这里使用SQL语句创建数据库和表)。设计步骤:(1)打开数据库管理器依次单击“开始”→“所有程序”→“MicrosoftSQLServer2008”→“SQLServerManagementStudio”,打开数据库管理工具,在弹出的“联