400 likes | 485 Views
第 16 章 Web 服务创建和使用. 主讲教师 : 杨建军. Talents come from diligence, and knowledge is gained by accumulation. 天才源于勤奋,知识源于积累 。. 教学目标. 本章介绍了如何使用 C# 访问关系数据库。讨论 ADO.NET 的结构以及如何使应 ADO.NET 访问关系数据库,通过本章的学习,读者应掌握 C# 的数据库编程,能够编写 C# 程序访问各种常见的数据库类型 。绝大多数软件系统都需要有数据库的支持,因此数据库编程也是每一个开发者应该掌握的。. 教学重点.
E N D
第16章 Web服务创建和使用 主讲教师: 杨建军
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\SQLExpress;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.DataSource 中的列表(或行)的名称。默认值为空字符串。
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()方法实现。