第14章数据库应用程序设计

Download Report

Transcript 第14章数据库应用程序设计

第16章
Web服务创建和使用
主讲教师: 杨建军
2015年4月8日
Talents come from diligence,
and knowledge is gained by accumulation.
天才源于勤奋,知识源于积累 。
教学目标
本章介绍了如何使用C#访问关系数据库。
讨论ADO.NET的结构以及如何使应
ADO.NET访问关系数据库,通过本章的学
习,读者应掌握C#的数据库编程,能够编
写C#程序访问各种常见的数据库类型 。绝
大多数软件系统都需要有数据库的支持,
因此数据库编程也是每一个开发者应该掌
握的。
教学重点
ADO.NET概述
.NET数据提供者
DataSet数据集
使用数据库
数据绑定
14.1 ADO.NET概述
ADO.NET是美国微软公司最新推出.NET平台中的一种数
据访问技术,是专门为.NET Framework而设计的,是
ADO的升级版本;ADO.NET集成了到.NET Framework中,
可用于任何.NET语言,尤其是C#;ADO.NET包括所有的
System.Data命名空间及其嵌套的命名空间 。ADO.NET
将成为构建.NET数据库应用程序的基础。
ADO.NET类库中提供了用于数据连接、处理数据操作的类。
System.Data名称空间可以通过数据提供者(provider)与数
据库通信,ADO.NET对象允许通过组件连接到数据库,
在数据库中进行检索、编辑、删除和插入数据,并在程序
中处理数据。ADO.NET支持已连接环境和非连接环境的
数据访问。
14.1.1 ADO.NET架构
ADO.NET架构的两个主要组件
Data Provider(数据提供者)
DataSet(数据集)
14.1.2 .NET Framework数据提供
程序
1..NET Framework有四种数据提供程序
 .NET Framework有以下四种数据提供程序:
 SQL Server .NET Framework数据提供程序。
 OLE DB .NET Framework数据提供程序。
 ODBC .NET Framework数据提供程序。
 Oracle .NET Framework数据提供程序。
14.1.2 .NET Framework数据提供
程序
2. .NET Data Provider核心类
.NET Framework数据提供程序包括四个核心类,用于实现对数据库的数据处理。
(1) Connection对象
数据库应用程序和数据库进行交互要在建立数据库连接的基础上进行。Connection
对象成为连接对象,提供了对数据存储中正在运行的事务(Transaction)的
访问技术。
(2) Command对象
Command对象用于执行数据库的命令操作,命令操作包括检索(Select)、插入
(Insert)、删除(Delete)以及更新(Update)操作。
(3) DataAdapter对象
DataAdapter(数据适配器)对象在DataSet对象和数据源之间架起了一座“桥梁”。
DataAdapter可以用数据源填充DataSet并解析更新。
(4) DataReader对象
数据流提供了高性能的、前向的数据存取机制。通过DataReader可以轻松而高效地
访问数据流。DataReader对象用于从数据库中读取由SELECT命令返回的只
读的数据流,在这个过程中一直保持与数据库的连接。
14.1.3 DataSet数据集
ADO.NET的一个比较突出的特点
是支持离线访问,即在非连接环境
下对数据进行处理,DataSet是支
持离线访问的关键对象,它将数据
存储在缓存中。DataSet对象不关
心数据源的类型,它将信息以表的
形式存放。DataSet对象是非连接
存储和处理关系的基础。
14.1.4 ADO.NET的设计目标
简单地访问关系数据
 可扩展性
ADO.NET具有良好的可扩展性 —— 它为.NET数据提
供者插件提供了框架,这些提供者可用于从任何数据
源读写数据
 支持多层应用程序
ADO.NET使用开放的XML标准格式在层之间通信,允
许数据通过Internet防火墙来传递,并允许以非
Microsoft技术实现一层或多层
 统一XML和关系数据访问
XML文档具有分层的数据结构。.NET技术是以XML为
基础构建的,ADO.NET可以扩展.NET的用法,沟通行、
列和XML文档中的关系数据
14.2 ADO.NET对象
ADO.NET类之间的关系
提供者对象
提供者对象就是指在每一个.NET数据提供
者中定义的对象,其名称前带有特定提供
者的名称
连接对象
命令对象
CommandBuilder对象
DataReader对象
DataAdapter对象
14.2.1 Connection对象
在C#.NET中,通过Connection对象实现数
据连接,并且在使用过程中,根据不同的
数据库的类型使用不同的Connection控件。
在ADO.NET Connection 类中有两个子类,
一个是SqlConnection;另一个是
OleDbConnection。
14.2.1 Connection对象
在C#.NET中,通过Connection对象实现数
据连接,并且在使用过程中,根据不同的
数据库的类型使用不同的Connection控件。
在ADO.NET Connection 类中有两个子类,
一个是SqlConnection;另一个是
OleDbConnection。
14.2.1 Connection对象
1.Connection对象常用属性有:
ConnectionString属性:用来指定要连接的数据源。在
ConnectionString属性中,需要使用很多参数。如:Data
Source用来指明数据源;Initial Catalog用来指明数据库;
Integrated Security用来指明集成安全等。
ConnectionTimeout属性:获取在尝试建立连接时终止尝
试并生成错误之前所等待的时间。返回结果:等待连接打
开的时间(以秒为单位)。默认值为 15 秒。
Database属性:获取当前数据库或连接打开后要使用的
数据库的名称。返回结果:当前数据库的名称或连接打开
后要使用的数据库的名称。默认值为空字符串。
DataSource属性:获取要连接的数据源实例的名称。
14.2.1 Connection对象
2. Connection对象常用方法
Connection对象最常用的方法有Open和
Close方法。
Open()方法:该方法用于打开由
ConnectionString属性指定的数据源连接。
Close方法():该方法用于断开由
ConnectionString属性指定的数据源连接。
14.2.1 Connection对象
3. Connection对象的创建
创建一个SqlConnection对象的方法如下:
String
connectionString="DataSource=yangjianjun\SQL
Express;Provade=SQLOLEDB.1;Initial
Catalog=Northwind;Integrated Security=True";
SqlConnection con = new SqlConnection();
con.ConnectionString = connectionString;
OleDbConnection对象的创建方法和SqlConnection
对象的创建方法类似。例如:
OleDbConnection con = new OleDbConnection ();
14.2.2 Command对象
通过编程的方法创建一个Command对象:
SqlCommand command = new
SqlCommand ();或
OleDbCommand command = new
OleDbCommand();
14.2.3 DataAdapter对象
DataAdapter对象是ADO.NET新增加。在
ADO.NET DataAdapter类中有两个子类,
一个是SqlDataAdapter类;另一个是
OleDbDataAdapter类。
DataAdapter对象包含有SelectCommand、
InsertCommand、UpdateCommand和
DelectCommand四个属性,用来定义处理
数据存储中数据的命令,并且每个命令都
是对Command对象的一个引用,可以共享
同一个数据源。
14.2.3 DataAdapter对象
通过编程的方法创建一个DataAdapter对象:
SqlDataAdapter dataAdapter = new
SqlDataAdapter ();或
OleDbDataAdapter dataAdapter = new
OleDbDataAdapter ();。
14.2.4 DataReader对象
DataReader对象用于对数据库的操作。在
ADO.NET DataReader类中有两个子类,
一个是SqlDataReader类;另一个是
OleDbDataReader类。
通过编程的方法创建一个DataReader对象:
SqlDataReader reader =
command.ExecuteReader();或
OleDbDataReader reader =
command.ExecuteReader();
14.2.4 数据集对象
数据集对象位于System.Data命名空间中,用于
定义ADO.NET的断开的、客户端的对象,包括
DataSet、DataTable、DataRow、DataColumn
和DataRelation等
 DataSet是数据集对象中的首要对象,此对象表示一组
相关表
 DataTable对象代表DataSet中的一个表
 DataTable对象的Rows和Columns分别是DataRow和
DataColumn对象,可用于访问DataTable表中的行和
列
 DataRelation对象代表通过共享列而发生关系的两个表
之间的关系
14.2.4 数据集对象
DataSet对象的创建可以通过工具栏中
的控件实现;通过菜单“数据”|“生成
数据集”来实现;或者选择
DataAdapter对象,单击右上角的黑三
角(智能标记),在下拉表中选择
“生成数据集…”,这时,会弹出“生
成数据集”对话框。如图14-15所示。
14.2.4 数据集对象
填充DataSet对象:
DataSet对象是一个必须填充的容器,
填充方法有多种:调用DataAdapter的
Fill方法、手工填充、复制或合并其它
DataSet的数据。我们这里介绍使用
DataAdapter的Fill方法填充DataSet对
象。
14.3 使用数据库
在C#代码中使用ADO.NET的第一步就是引用System.Data命
名空间,该命名空间中含有所有的ADO.NET类。接着,需要
根据数据源的类型不同,而引用相应的数据提供者。
 SQL Server .NET数据提供者:SQL Server数据库,使用using指令引用
System.Data.SqlClient。
 Oracle .NET 数据提供者:Oracle数据库,内置Oracle .NET驱动程序
是最佳选择,System.Data.OracleClient;另外,Oracle本身也提供了
一个.NET 数据提供者,Oracle.DataAccess.Client
 OLE DB .NET提供者: Microsoft Access,System.Data.OleDb
 ODBC .NET数据提供者:如果数据源没有内置的或OLE DB提供者,
则可以使用ODBC.NET数据提供者System.Data.Odbc
 其他内置的.NET 数据提供者:如果数据库有专用的内置.NET 数据提
供者,就可以使用它
14.3.1创建数据库
创建数据库可以使用Sqlcmd命令来完成。
SDK 示例所使用的 SQL Server Express
实例的名称是“SQLExpress”。要访问该
数据库,请使用服务器名称:
(local)\SQLExpress。
<SDK 提示符> sqlcmd -S
(local)\SQLExpress -E -d <database>
为了知道自己计算机名称(local),可以
在运行sqlcmd命令之前先在命令提示窗
口中运行一下hostname命令。
14.3.2 DataGridView控件
DataGridView控件使程序员可在自定义的网格中显
示数据。
DataGridView控件主要属性
 ReadOnly:该值指示用户是否可以编辑
System.Windows.Forms.DataGridView 控件的单元
格。
 DataSource:获取或设置
System.Windows.Forms.DataGridView 所显示数据
的数据源。
 DataMember:获取或设置数据源中
System.Windows.Forms.DataGridView 显示其数据

的列表或表的名称。
CurrentRow:获取包含当前单元格的行。
14.3.2 DataGridView控件
BindingSource类是和DataGridView控件经常配合
使用的一个类。BindingSource类的主要属性如下:
 public object DataSource { get; set; }:获取或设

置连接器绑定到的数据源。返回结果:作为数据源
的 System.Object。默认为null。
public string DataMember { get; set; }: 获取或
设置连接器当前绑定到的数据源中的特定列表。返
回结果:
System.Windows.Forms.BindingSource.DataSo
urce 中的列表(或行)的名称。默认值为空字符串。
14.3.3使用数据窗体向导
完成数据库访问
使用数据窗体向导创建简单数据库应用程序
是快捷简便的途径,用户仅需要按向导提示
回答若干问题,即可生成一个具有基本数据
库管理功能的应用程序。以创建一个处理数
据库Noethwind.dbo的数据库应用程序了解
数据库窗体向导的创建。
 创建数据源
 预览数据
 在应用程序中显示数据
14.3.4 使用DataReader
完成数据库访问
使用DataReader读取数据的过程如下:
(1)连接数据源;
(2)打开连接;
(3)执行SQL查询命令。
(4)使用DataReader读取并显示数据。
(5)关闭DataReader和连接。
14.4数据绑定
数据绑定就是将一个控件的属性与一个数据源连
接起来。大多数Windows窗体控件的属性都可以
连接或绑定到一个数据源。一经绑定,数据源中
值就会改变绑定的控件的属性,反之亦然。
Windows窗体控件支持两种类型的数据绑定:简
单绑定和复杂绑定。简单数据绑定允许你将将一
个控件或窗体的属性绑定到数据源中的单个值。
而复杂数据绑定专门用于将一个控件连接到一系
列的值。简单数据绑定适合只显示一个值的控件,
如Label 、Text等之类的控件。复杂数据绑定适合
能显示多个值的控件,如:ListBox、
CheckedListBox、ComboBox、和 DataGridView
等。
14.4数据绑定
在常用控件中,往往要使用数据绑定实现
数据库应用程序的开发。实现数据绑定的
一般步骤如下:
 无论是简单数据绑定,还是复杂数据绑
定,要实现数据绑定的第一步就是就是要
连接数据库,得到可以操作的DataSet。
 根据不同组件,采用不同的数据绑定。
使用数据集对象
DataSet是ADO.NET中的核心对象,所有复杂的
操作都是使用它来完成的。DataSet包含一组
DataTable对象,表示所操作的数据库表。每个
DataTable对象又都有一些子对象:DataRow和
DataColumn,表示数据库表中的行和列。通过这
些对象可以获取表、行和列中的所有元素。
为应用程序添加数据源
添加绑定控件
将控件与数据源绑定的方法就是通过“属性”窗
口,修改控件的“Data Source”属性
14.5 修改数据库
修改数据库可以使用DataSet来完成,也可
以使用编程的方法去完成。
14.5 修改数据库
1.使用DataSet修改数据库
对数据库的修改操作可以用相同的模式完
成:
(1)用数据库中要使用的数据填充数据集
DataSet。
(2)修改存储在DataSet中的数据,例如,更新、
插入和删除记录。
(3)完成了所有的修改操作后,把DataSet中所
作的修改更新到数据库中。
14.5 修改数据库
2.结构化查询语言
SQL(Structured Query Language,结构化查询语言)是操作
所有关系型数据库的标准语言。其常用主要命令如下。
读取表格内容:
SELECT * FROM tableName
向表格插入一条记录:
INSERT INTO table1 VALUES(字段值1,字段值2,…)
查询满足特定条件的记录:
SELECT * FROM tableName WHERE条件表达式
从表格删除记录:
DELETE FROM tableName WHERE 条件表达式
14.5 修改数据库
3.增加记录
增加数据记录可以通过DataSet控件实现,首先创建一个新
行,使用NewRow方法或Add方法将新数据行添加到数据
表的DataRow集合中,调用DataAdapter的Update方法实
现数据库的更新,并调用DataSet的AcceptChanges接受
更改。如:
DataTable mytable=dataSet11.Tables["txb "];
object[] o={2,"李信","67691567","13523644158","450008",};
mytable.Rows.Add(o);
oleDbDataAdapter1.Update(dataSet11);
dataSet11.AcceptChanges();
14.5 修改数据库
4.删除记录
删除表中的元素可以从DataTable对象中删除
DataRow对象,使用Delete方法。如:
DataTable mytable=dataSet11.Tables["txb"];
mytable.Rows[1].Delete();
oleDbDataAdapter1.Update(dataSet11);
dataSet11.AcceptChanges();
14.5 修改数据库
5.更新记录
应用程序中的数据更新应及时反映在数据
库的操作上,如通过dataSet修改了相应的
数据,则要把该修改表现在数据库中,因
为dataSet和DataAdapter相互传送数据,
则对数据的更改通过DataAdapter的
Update()方法实现。
谢谢!