第8章 设计数据库应用网站 本章讲述的主要内容 8.1 数据库基础知识 8.2 使用数据库系统 8.3 SQL查询基础 8.1 数据库基础知识 8.2 使用数据库系统 8.3 SQL查询基础 8.4 ADO.NET简介 8.5 使用数据控件访问数据库 8.6 使用ADO.NET对象
8.1 数据库基础知识 8.1.1 有关数据库的概念 1. 数据库 2. 数据库管理系统 3. 数据库应用程序 4. 数据库系统
8.1 数据库基础知识 8.1.2 关系数据库 关系型数据库是根据表、记录和字段之间的关系进行数据组织和访问的一种数据库,它通过若干个表(Table)来存储数据,并通过关系(Relation)将这些表联系在一起。 近几年来,关系型数据库已成为数据库设计事实上的标准,这不仅因为关系模型本省具有强大的功能,而且还由于它提供了称为结构化查询语言Structure Query Language(SQL)的标准接口,该接口允许以一致的和可以理解的方法来一起使用多种数据库工具和产品。 在一个关系型数据库中可以包含若干张表,每张表又由若干记录组成,记录由若干字段组成。表与表之间通过关系连接。
8.1 数据库基础知识 8.1.2 关系数据库 1. 关系型数据库的分类 8.1 数据库基础知识 8.1.2 关系数据库 1. 关系型数据库的分类 关系型数据库一般可分为两类,一类是桌面数据库,如Access、Paradox、FoxPro和dBase等。另一类是客户/服务器数据库,如SQL Server、Oracle、Sybase等。 2. 表、记录和字段 表(Table)是一种数据库对象,由若干条描述客观对象多个特征的记录(Record)也称为行(Row)组成。表中每一列(Column)表示客观对象的同一特征点,也称为字段(Field)。见表8-1和表8-2。
8.1 数据库基础知识 8.1.2 关系数据库 3. 关键字 关键字是表中某个或多个字段,可以是唯一的,也可以是非唯一的。唯一关键字可以指定为主键,用来唯一标识一条记录。 4. 索引 为了更快地访问数据,大多数数据库都使用关键字对表进行索引。也就是按关键字对数据库进行排序,并建立一张索引表,每个索引输入项指向该记录在数据库中的行。 5. 关系 数据库中可以包含多张表,表与表之间可以用不同的方式相互关联。这样做可以充分利用数据库中现有数据,减少数据的冗余。
8.2 使用数据库系统 8.2.1 Microsoft Access 8.2 使用数据库系统 8.2.1 Microsoft Access Access数据库管理系统是Microsoft Office的一个组件,是最常用的本地数据库之一。在C#中可以方便地使用数据库对象,操作Access数据库。 1. 创建数据库 2. 创建数据表
8.2 使用数据库系统 8.2.2 Microsoft SQL Server 8.2 使用数据库系统 8.2.2 Microsoft SQL Server 前面介绍的Access数据库属于桌面数据库,主要在本地(本计算机)运行。在本章中将主要介绍另一类数据库的使用,即客户机/服务器(Client/Server)数据库,如SQL Server、Oracle和Sybase数据库等。通过使用这种数据库系统,用户可以方便地访问远程数据信息,而且这种数据库系统的多用户性使得信息共享成为现实。本节将以安装在Windows 2000 Server中的SQL Server 2000企业版数据库管理系统为背景介绍其使用方法。 在SQL Server 2000的企业管理器中用户可以十分方便地创建数据库,创建数据库包括有创建数据库结构、创建表、创建相应的视图及存储过程等项工作。
8.2 使用数据库系统 8.2.2 Microsoft SQL Server 1. 创建SQL Server数据库 8.2 使用数据库系统 8.2.2 Microsoft SQL Server 1. 创建SQL Server数据库 2. 在SQL Server中创建表 3. 使用SQL Server客户端工具
8.3 SQL查询基础 SQL是Structured Query Language(结构化查询语言)的缩写。表8-4中列举了常用的SQL语句。 表8-4 SQL的主要语句及说明
8.3 SQL查询基础 8.3.1 查询语句Select SELECT语句主要用于从数据库中返回需要的数据集,其语法格式为: SELECT select_list [INTO new_table_name] FROM table_list [WHERE search_conditions] [GROUP BY group_by_list] [HAVING search_conditions] [ORDER BY order_list [ASC|DESC]]
8.3 SQL查询基础 8.3.2 插入记录语句Insert 使用Insert语句可以向表中插入一条记录,该语句的语法格式为: INSERT INTO 表名称(字段名) VALUE(字段值) 8.3.3 修改记录语句Update 使用Update语句可更新(修改)表中的数据,该语句的语法格式为: UPDATE 表名称 SET 字段名=值 WHERE 条件 8.3.4 删除记录语句Delete 使用DELETE语句可以删除数据表中指定行,该语句的语法格式为: DELETE FROM 表名称 WHERE 条件
8.4 ADO.NET简介 8.4.1 数据库通用接口 美国微软公司提供的数据库通用接口程序,经过了ODBC→OLEDB→ADO→ADO.NET几个发展阶段。 1. ODBC通用数据库接口 ODBC(Open Database Connectivity,开放数据库互联) 2. ADO通用数据库接口 ADO(Active Data Object,动态数据对象) 3. ADO.NET概述 在.NET框架的System.Data命名空间及其子空间中有一些类,这些类被统称为ADO.NET。使用ADO.NET可以方便地从Microsoft Access、Microsoft SQL Server或其他数据库中检索、处理数据,并能更新数据库中的数据表。
8.4 ADO.NET简介 8.4.2 ADO.NET的数据模型 ADO.NET采用了层次管理的结构模型,各部分之间的逻辑关系如图8-18所示。
8.4 ADO.NET简介 8.4.3 数据源控件简介 数据源控件的类型主要有以下几种。 1. AccessDataSource 8.4.3 数据源控件简介 数据源控件的类型主要有以下几种。 1. AccessDataSource AccessDataSource数据源控件是专门为连接Microsoft Access数据库而设计的。 2. SqlDataSource SqlDataSource数据源控件是专门为连接Microsoft SQL Server数据库而设计的。 3. ObjectDataSource 4. XmlDataSource 5. SiteMapDataSource
8.5 使用数据控件访问数据库 8.5.1 使用GridView数据控件 8.5 使用数据控件访问数据库 8.5.1 使用GridView数据控件 GridView控件用于配合数据源控件实现对数据库进行浏览、编辑、删除等操作。数据源控件主要包括用于连接Access数据库的AccessDataSource和用于连接SQL Server数据库的SqlDataSource。 1. 添加数据源控件 2. 添加GridView控件 3. 设置GridView控件的属性
8.5 使用数据控件访问数据库 8.5.2 使用FormView数据控件 8.5 使用数据控件访问数据库 8.5.2 使用FormView数据控件 FormView控件与前面介绍过的GridView控件相似,也是用于浏览或操作数据库的数据控件。它与GridView相比主要的不同在于显示在FormView中的数据记录是分页的,即每页只显示一条记录。
8.5 使用数据控件访问数据库 8.5.3 使用Repeater控件 8.5 使用数据控件访问数据库 8.5.3 使用Repeater控件 Repeater控件是一个数据绑定列表控件(数据浏览控件),它允许通过为列表中显示的每一项重复指定的模板来自定义数据显示布局。Repeater控件是一个基本模板数据绑定列表,它并没有内置的布局或样式,因此必须在这个控件的模板内显式声明所有的HTML布局标记、格式设置及样式标记等。也正因为此,Repeater控件具有更好的灵活性,但该控件没有内置的选择和编辑功能。 Repeater控件的模板 2. 使用Repeater控件 例8-2
8.5 使用数据控件访问数据库 8.5.4 使用DetailsView控件 8.5 使用数据控件访问数据库 8.5.4 使用DetailsView控件 DetailsView控件顾名思义是用于查看细节信息的控件,其作用主要是根据用户在父表中项的选择,在DetailView控件中显示子表的信息。 1. 使用DetailsView控件查看子表信息 例8-3 2. 使用DetailsView控件操作SQL Server数据库 例8-4
8.6 使用ADO.NET对象 8.6.1 ADO.NET对象概述
8.6 使用ADO.NET对象 8.6.2 数据集(DataSet) 数据集相当于内存中暂时存放的数据库,它不仅可以包括多张数据表,还可以包括数据表之间的关系和约束。允许将不同类型的数据表复制到同一个数据集中,甚至还允许数据表与XML文档组合到一起协同操作。创建数据集对象的语法格式为: DataSet 对象名 = new DataSet(); 或: DataSet 对象名 = new DataSet("表名")
8.6 使用ADO.NET对象 8.6.3 数据表(DataTable) 数据表是用来存放数据的。一个数据集中可能包括多张数据表,每张数据表又可包括多个行和列。数据表的创建有两种方式: 1) 将数据夹在到数据集时,系统将自动创建一些数据表对象。 2) 以编程的方式创建DataTable对象,然后将该对象添加到数据集的Tables集合中。 提取数据集中数据表的语法格式为: DataTable 表对象名 = 数据集名.数据表名;
8.6 使用ADO.NET对象 8.6.4 数据行(DataRow) 数据行是给定数据表中的一条记录(表中的一行),它可能代表一个学生、一位用户或一件商品的相关数据集合。 数据行对象的方法提供了对表中数据的操作(如,插入、删除、更新或查看等)。提取数据表中数据行的语法格式为: DataRow 数据行对象名 = 数据表对象名.Rows[n];
8.6 使用ADO.NET对象 8.6.5 数据列(DataColumn) 数据表中的数据列(也称为“字段”)表示了数据表的结构。例如,可以用它确定列中的数据类型和大小,还可以对其属性进行设置。例如,确定列中数据是否是只读的、是否是主键、是否允许空值等。还可以让列在一个初始值的基础上按自定义步长值自动增加。 获取某列的值需要在数据行的基础上进行,其语法格式如下: string dc = dr.Columns["字段名"].ToString(); 或: string dc = dr.Column[index].ToString();
8.6 使用ADO.NET对象 8.6.6 数据关系(DataRelation)
8.6 使用ADO.NET对象 8.6.7 Connection(连接) Connection类提供了对数据源连接的封装。类中包括连接方法及描述当前连接状态的属性。在Connection类中最重要的属性是ConnectionString(连接字符串),该属性用来指定服务名称、数据源信息及其他登录信息。 ConnectionString中有两个重要的重要的部分:字符串的内容和数据提供器名称。 字符串内容中包含有“DataSource”(数据源)、“Initial Catalog”(默认连接数据库)及用于描述用户身份的“User ID”和“Password”。 例8-5
8.6 使用ADO.NET对象 8.6.8 Command(命令) Command对象可以在数据源中执行SQL语句或存储程序,并从数据源返回结果。Command对象常用的构造函数包括两个重要的参数,一个是要执行的SQL语句,另一个是已建立的Connection对象。 1. ExecuteNonQuery方法 该方法对Connection对象建立的连接进行不返回任何行的查询,如Updeae(更新)、Delete(删除)和Insert(插入),该方法返回一个整型(Integer)数据,表示受查询影响的行数。 2. ExecuteReader方法 对Connection对象建立的连接执行一个CommandText属性中定义的命令,返回一个仅向前的、只读的数据集DataReader对象,该对象连接到数据库的结果集上,允许行检索。
8.6 使用ADO.NET对象 8.6.8 Command(命令) 3. ExecuteScalar方法 该方法对Connection对象建立的连接执行CommandText属性中定义的命令,但只返回结果集中的第1行第1列的值。
8.6 使用ADO.NET对象 8.6.9 DataAdapter(数据适配器) 1. DataAdapter对象常用属性及方法 该对象包含有SelectCommand(查询)、InsertCommand(插入)、UpdateCommand(更新)和DelectCommand(删除)四个属性,用来定义处理数据存储中数据的命令,并且每个命令都是对Command对象的一个引用,可以共享同一个数据源。 该对象常用的方法有以下几个。 1) Fill方法:该方法用来执行SelectCommand,用数据源的数据填充DataSet对象。 2) FillSchema方法:该方法使用SelectCommand提取数据源中表的架构,并根据相应的约束在DataSet对象中创建一个空表。 3) Update方法:该方法用来将DataSet对象中更改的内容更新到初始的数据库中。
8.6 使用ADO.NET对象 8.6.9 DataAdapter(数据适配器) 2. 使用DataAdapter对象浏览数据库 例8-9
8.6 使用ADO.NET对象 8.6.9 DataAdapter(数据适配器) 3. 使用DataAdapter对象操作数据库 SQL语句可以通过以下两种方式传递给DataAdapter对象: 1) 通过DataAdapter对象的构造函数执行SQL语句。 例如,下列语句在声明一个DataAdapter对象da的同时,指定da对象要执行strSQL字符串变量表示的SQL语句,要使用Connection对象conn表示的数据库连接。 OleDbDataAdapter da = new OleDbDataAdapter(strSQL, conn); 2) 通过DataAdapter对象的4个常用属性执行SQL语句。 下面的例题说明了使用DataAdapter对象的4个常用Command属性,执行SQL语句操作数据库的方法。 例8-10
8.6 使用ADO.NET对象 8.6.10 DataReader(数据读取器) 1. DataReader对象的常用属性及方法 OleDbDataReader和SqlDataReader对象常用的属性和方法有以下几个。 1) FieldCount属性 2) Read()方法 3) GetValue()方法 4) GetValues()方法 5) NextResult()方法 6) Close()方法 2. 使用DataReader对象 例8-11
8.6 使用ADO.NET对象 8.6.11 DataView(数据视图) DataView表示用于排序、筛选、搜索、编辑和导航的DataTable的,可绑定数据的自定义视图。使用DataView可以获取表中具有不同排序顺序的数据,也可以按行状态或基于过滤器表达式来过滤数据,以声称DataTable中数据的子集。DataTable也有一个DefaultView的属性,该属性返回表的默认DataView。如果希望在表上创建自定义视图,只需在DefaultView返回的DataView上设置RowFilter(行过滤)即可。DataView对象通过调用DataView类的构造函数来创建,其语法格式如下: DataView 对象名 = new DataView(); 或: DataView 对象名 = new DataView(table); DataView 对象名 = new DataView(table, rowfilter, sort, rowState);
8.6 使用ADO.NET对象 8.6.11 DataView(数据视图) 1. DataView对象的常用属性 例8-12