650 likes | 812 Views
第 7 章利用 ADO.NET 进行数据访问. 第 7 章 ADO.NET 的数据库访问技术. 教学目的: 了解 ADO 体系结构,各成员的基本功能; 理解 SqlCommand、SqlConnection、SqlDataAdapter、SqlDataAdapter 、DataSet 的基本方法; 基本掌握 SqlConnection、SqlCommand、SqlDataAdapter 操作数据库的基本模式。 了解 DataSet 的功能特性,掌握创建与读取数据的方法 ;. 第 7 章 ADO.NET 的数据库访问技术. 教学目的:
E N D
第7章 ADO.NET的数据库访问技术 教学目的: 了解ADO体系结构,各成员的基本功能; 理解SqlCommand、SqlConnection、SqlDataAdapter、SqlDataAdapter 、DataSet的基本方法; 基本掌握SqlConnection、SqlCommand、SqlDataAdapter操作数据库的基本模式。 了解DataSet的功能特性,掌握创建与读取数据的方法;
第7章 ADO.NET的数据库访问技术 教学目的: 掌握DataSet与DataTable、DataRow和DataColumn之间构成关系; 基本掌握Datagrid的应用特性,绑定数据源的方法。 掌握SqlDataAdapter的Command型属性对象,与配置方法,Fill与Update方法; 掌握删除DataTable的行对象的方法,以及在Datagrid中编辑数据的方法,以及DataTable的行状态变化情况;
第7章 ADO.NET的数据库访问技术 教学目的: 基本掌握典型模式下的数据库更新方法。 掌握SqlDataAdapter的Command型属性对象,与配置方法,Fill与Update方法; 掌握删除DataTable的行对象的方法,以及在Datagrid中编辑数据的方法,以及DataTable的行状态变化情况; 基本掌握典型模式下的数据库更新方法。
第7章 ADO.NET的数据库访问技术 教学重点: SqlConnection、SqlCommand与SqlDataAdapter的基类功能与常用属性。 SqlDataAdapter数据数据方法与SqlCommand的ExecuteReader方法。 SqlDataAdapter 、SqlDataAdapter、DataSet 、DataGrid综合应用,读取数据库技术过程。 SqlDataAdapter 的Command成员与数据库操作方法,Datagrid的设置于数据编辑与提交方法。
第7章 ADO.NET的数据库访问技术 教学难点: 理解数据库连接、SQL操作的ADO组件实现模式。 理解SqlDataAdapter 、SqlDataAdapter、DataSet 、DataGrid典型应用模式。 在Datagrid中编辑数据以及典型模式下的应用关键字是现行删除方法。
ADO.NET数据访问 Microsoft公司用于访问多个提供程序中数据的Microsoft策略称为通用数据访问。通用数据访问的目标是可从任意类型计算机上的任意应用程序中访问任意类型的数据。数据源可包括关系数据库、文本文件、电子数据表、电子邮件或地址簿,数据可被存储在台式机、局域网、大型机、内联网或Internet上。
ADO.NET的优点 (1)互用性:ADO.NET使用XML为数据传输的媒质。 (2)易维护性:使用N层架构分离业务逻辑与其他应用层次,易于增加其他层次。 (3)可编程性:ADO.NET对象模型使用强类型数据,使程序更加简练易懂。 (4)高性能:ADO.NET使用强类型数据取得高性能。 (5)可扩展性:ADO.NET鼓励程序员使用Web方式,由于数据是保存在本地缓存中的,不需要解决复杂的并发问题。
ADO.NET概述 链接到ADO.NET的体系结构图 {.NET Data Provider 、DataSet } .NET Data Provider作为ADO.NET的连接和数据存取层,能够向它的另一个成员DataSet提供来自数据源的数据。 DataSet是ADO.NET的数据处理核心,它像数据库一样允许内部存放多个表对象,表由记录和数据字段组成,它包含主键、外键,表间也可建立关系,支持多个数据源、XML数据的存取以及数据集成,是客户端的高性能数据缓存区。在离线状态下,数据集能够独立接受应用程序对数据的增、删、改操作, 并可通过DataAdapter对象更新数据库。
使用ADO.NET开发数据库应用程序的步骤 • 建立Connection对象与数据源的连接。 • 使用Command对象执行对数据源的操作,通常使用SQL命令。 • 使用DataAdapter、DataSet等对象对数据进行操作。 • 利用DataGrid等控件显示操作结果。
管理支持程序与对象 .NET框架中的管理支持程序用于连接数据库、执行命令和获取结果。 这些结果既可以被DataReader直接处理,也可以通过DataAdapter放置在ADO.NET DataSet对象中以特别的方式向用户显示,还可以将数据和多个数据源结合起来在层级之间传送。 管理支持程序必须在连接状态下才能完成数据库的交互任务。
.NET 数据提供者 .NET 数据提供者包含一组数据提供者对象,用于与特定的数据源通信。 .NET 数据提供者被组织在特定的命名空间中,表1显示了它们的构成。 表1如下:
.NET 数据提供者 ⑴数据提供程序 .NET数据提供程序针对两类数据源分为SQL 、OLE DB两组,各有四个对象: ①数据库连接对象Connection(OleDbConnection 、SqlConnection) 提供数据源(库)的连接,针对不同的数据库有不同的连接对象; ②数据库命令对象Command(OleDbCommand 、SqlCommand) 提供存取数据库的命令(SQL 包括:Select 、Insert 、Delete 、Update)
.NET 数据提供者 ③数据库适配器DataAdapter(OleDbDataAdapter 、SqlDataAdapter) Connection内含两个主要成员,Connection对象与一组Command对象,通过构造函数可以为这两个对象赋值。它可以为DataSet装载表数据。 ④数据库阅读器DataReader: 通过Command执行SQL查询命令提供一个向前的数据流。可供应用程序读取。
.NET 数据提供者 ⑵数据集组件(DataSet) 数据集对象相当于内存中的一个数据库,可以包含若干个表对象、与关联对象。它可以接收DataAdapter组件检索到的数据,在通常应用模式下,它的某一个表对象可以作为一个数据格栅控件的数据源。
.NET 数据提供者 一、SQL Server .NET数据提供者 ⑴ SqlConnection类 SqlConnection类用于创建与SQL Server 数据源的连接,其构造函数为: SqlConnection(connectionString As String ) ConnectionString是用于打开 SQL Server 数据库的连接字符串,也称数据库连接串。
.NET 数据提供者 ①使用当前的 Windows 帐户登录数据库方式 Dim connectionString = "server=yjs; Integrated Security=SSPI; database=student" ②使用数据库服务器命名的SQL Server 登录ID和密码登录数据库方式 Dim connectionString = "server=yjs; uid=sa; pwd=1; database=student" 应用数据库连接串创建连接对象的语法示例如下: Dim MyConnect SqlConnection =New SqlConnection(connectionString)
.NET 数据提供者 ⑵ SqlCommand类 SqlCommand的对象用于执行一个SQL 语句或存储过程,其构造函数为: SqlCommand(cmdText As String,connection As SqlConnection) 其中:cmdText是一个SQL命令字符串或是已存在的存储过程名;connection是SqlCommand实例使用的连接对象。
.NET 数据提供者 例如: Dim cmdText="Select Name,Chinese,Arithmetic,English From Grade_Tab " Dim MyCom As SqlCommand = New SqlCommand(cmdText, MyConnect) 其中:MyConnect是一个有效的SqlConnection对象
.NET 数据提供者 ①常用属性 属性CommandText,用于获取或设置需要对数据源执行的 SQL 语句或存储过程名。 属性Connection,用于获取或设置当前实例对象使用的 SqlConnection对象。 ②常用方法表SqlCommand 提供了四个ADO.NET中最重要的操作数据库方法,如表2所示。 链接表2
7.2 .NET 数据提供者 ⑶ DataAdapter DataAdapter也称适配器,它用于连接数据源和DataSet。 ①对于使用SQL Server .NET数据提供者 SqlDataAdapter(SelectText As String SelectConn As SqlConnection) ②对于使用OLEDB .NET数据提供者 OleDbDataAdapter(SelectText As String SelectConn As OleDbConnection)
7.2 .NET 数据提供者 SelectText是将要由该对象的 SelectCommand 属性使用的 SQL Select 语句或存储过程。 SelectConn表示该对使用的连接对象。 以yjs为数据库服务器,并假设student数据库中存在student表,应用SQL Server .NET数据提供者创建一个DataAdapter的实例对象Da: 查看代码链接
7.2 .NET 数据提供者 DataAdapter的常用属性如下表所示 :
7.2 .NET 数据提供者 ⑷ SqlDataReader SqlDataReader用于创建一个连续的、表的记录行流,通过它的类方法可依序读取各记录的字段值,是获取数据库数据的主要方法。创建该对象使用SqlCommand类的ExecuteReader 方法。例如: Dim MyReader As SqlDataReader = MyCom.ExecuteReader() 注:MyCom是一个有效的SqlCommand实例对象。
7.2 .NET 数据提供者 ①SqlDataReader的常用属性如下表所示:
7.2 .NET 数据提供者 ②SqlDataReader的常用方法如下表所示:
7.2 .NET 数据提供者 如果在应用程序使用SQL Server .NET数据提供者,需要在程序的开始部分声明对SqlClient命名空间的引用,代码为: Imports System Imports System.Data.SqlClient
7.2 .NET 数据提供者 二、应用.NET 数据提供者访问数据库的实例 窗体中包含一个ListView控件,它工作在Details方式下,用以显示学生成绩表。应用程序的全部代码均表现在按钮的单击事件过程中。“读取”按钮用于数据读取;“计算”按钮用于数据计算。 数据库环境: 数据库服务器 yjs; 数据库 student; 数据表 Grade_Tab。 链接到运行结果图 {内容通过媒体演示教学}
数据集 表集合 表 行集合 行 列 列集合 约束集合 约束 关系 关系集合 图1 DataSet 层次对象模型 7.3 数据集 一、DataSet层次结构图
7.3 数据集 ⒈创建DataSet实例对象与数据装载 创建DataSet 对象的构造函数不需使用任何参数。 例如:Dim MyDataSet As New DataSet VB.NET提供两种为DataSet装载数据的方法: 一种是应用前面提到的DataAdapter方法。 另一种是从XML文件读取数据填充。
7.3 数据集 Fill方法语法格式: Fill(IdataSet As DataSet,SrcTable As String)As Integer 其中:IdataSet表示需要填充数据的数据集;SrcTable是数据集中表的标识,通过它可以访问数据集中的表,它可以是数据集中已经存在的表,也可是一个新表名称。 返回值:在 DataSet 中成功添加或刷新的表行数。
7.3 数据集 例如: Dim MyconnStr = "Integrated Security=SSPI;database=student;server=yjs" Dim cmdText = "Select Name,Chinese,Arithmetic,English From Grade_Tab " Dim MyConnect As SqlConnection = New SqlConnection(MyconnStr) Dim Da As SqlDataAdapter = New SqlDataAdapter(cmdText, MyConnect) Dim MyDataSet As New DataSet '创建数据集对象 MyDataSet MyDataAdapter.Fill(MyDataSet, "Grade_Tab") '在数据集中创建并装填一个表
7.3 数据集 ①Columns属性 Columns属性表示当前表的列集合,通过0起始的索引号可访问表的列成员。例如通过以下程序可获得表的第一个列名: Dim MyTab As DataTable MyTab = MyDataSet.Tables("Grade_Tab") Dim TabStr As String =DataTable.Columns(0).ToString() '获取第1个列名
7.3 数据集 ②Rows属性 Rows属性表示当前表的行集合,通过0起始的索引可访问表的行对象。 例如,以下代码可获取表的总行数,并创建了一个行对象MyRow: Dim MyTab As DataTable MyTab = MyDataSet.Tables("Grade_Tab") Dim RowCount As Integer = MyTab.Rows.Count '获取表的行数 Dim MyRow As DataRow = MyDataSet.Rows(0) '使用0行创建一个行对象 MyRow
7.3 数据集 ③PrimaryKey 属性 PrimaryKey 属性表示主键列集合。其中的列对象必须是Columns的成员。例如,以下代码为前面示例中MyTable设置一个单列主键: MyTable.PrimaryKey = New DataColumn() {MyTable.Columns("id")} 主键用于惟一标识表的行对象,它也可用于在表中查找指定行,Rows的Find方法能够在表中找到指定关键字的行对象,例如: Dim delRow As DataRow = MyTable.Rows.Find("12")
7.3 数据集 ⑵ DataRow的常用属性与方法 DataRow的常用属性多数针对行对象的访问,包括行数据的访问和行状态的访问,DataRow的常用方法大都针对行对象的操作。 ①Item属性 通过DataRow的Item属性可获取或设置存储在指定列中的数据。Item是行对象的列集合,可通过0起始的索引号或列名来访问行中指定列的数据。例如: Dim MyTab As DataTable '声明表对象 MyTab = MyDataSet.Tables("Grade_Tab") '初始化表对象
7.3 数据集 ②RowState属性如下表所示: RowState属性表示当前行的状态。
7.3 数据集 ③DataRow的常用方法 AcceptChanges方法用于结束当前行的编辑状态并执行保存。如果该行的 RowState 是“已添加”或“已修改”,则执行该方法后,RowState 变成“未更改”。如果 RowState 是“已删除”,执行该方法后,它在表中被移除。
7.3 数据集 Delete方法用于删除当前行对象,行被删除后,它的RowState由Unchanged变成Detached。在执行 AcceptChanges 之前,它一直保持这个状态。如果对其执行AcceptChanges方法,则该行被真正从表中删除。但如果对该行执行 RejectChanges 方法,该行则被取消“删除”,行状态又变回Unchanged。
7.3 数据集 RejectChanges方法可拒绝自初始装载数据或上次保存数据以来,对数据行进行的所有更改。如果 RowState 是“已删除”或“已修改”,则该行恢复为其以前的值,RowState 变成“未更改”。如果 RowState 是“已添加”,该行将被移除表。例如: MyTab = MyDataSet.Tables("Grade_Tab") Dim MyRow As DataRow = MyTab.Rows(1) MyRow.Delete() '删除MyRow行,这时MyRow 的状态为Deleted MyRow. AcceptChanges() '保存提交MyRow行,这时MyRow 被移除所在表 MyTab.Rows(0).Item(4)=100 '修改行中的列值,这时MyRow 的状态为Modified MyTab. RejectChanges() 'MyRow 的状态回到Unchanged
7.3 数据集 ⒊DataTable操作实例 下面的程序创建一个表对象myTable,它包含ID、Name、Sex、Average四个列。程序分为两个代码块,主调程序是一个按钮的单击事件过程。它调用函数过程创建了myTable,并为该表添加了两个新行。又为每个新行的各列赋值。 链接到主调程序代码: 链接到函数过程代码:
DataGrid控件 7.3 数据集 二、应用DataSet访问数据库 下图描述了应用.NET Data Provider、DataSet和界面控件访问数据库的模式,这种模式下,用户可通过界面控件浏览、编辑或更新数据库。
7.3 数据集 ⒈DataGrid控件 DataGrid 控件通过列表方式显示数据,最简单的应用方法是,为DataGrid绑定一个单表数据源,然后在网格中显示数据。它的SetDataBinding方法用于绑定各种数据源,例如,DataSet的表。 ⑴ DataGrid控件的外观设置 通过DataGrid的属性可以设置控件的外观。
7.3 数据集 ⑵ 为DataGrid控件绑定数据源 DataGrid控件绑定数据源有用两种方法。 ①使用SetDataBinding方法设置DataGrid的数据源 该方法将DataSet中的某个表指派给DataGrid对象,作为数据源。 例如: DataGrid1.SetDataBinding(MyDataSet, "Grade_Tab")
7.3 数据集 ②使用DataSource属性设置DataGrid的数据源 通过DataSource 属性可以获取或设置DataGrid的数据源。但这个属性值必须是有效数据源,如DataTable、DataSet等。它不能是字符串形式的表名。 以下设置是有效的: DataGrid1.DataSource = MyDataSet.Tables(0) 以下设置是无效的: DataGrid1.DataSource = MyDataSet.Tables(0).TableName
7.3 数据集 ⑶ 访问DataGrid中的数据 DataGrid 控件中的行表示数据源表中的一个记录,它的列对应表中的字段。使用Items可以编程的方式控制、访问 DataGrid的单元值。 例如,访问DataGrid1的数据: Dim DecVal As Decimal = DataGrid1.Item(0,3) '读取DataGrid1中0行3列的数据 DataGrid1.Item(2,3)=97.5 '为DataGrid1中2行3列单元赋值
7.3 数据集 通过DataGrid的CurrentRowIndex属性可以获取或设置 DataGrid当前选定行的索引号。通过CurrentCell属性可获取或设置具有焦点的单元格对象,它也能返回当前选定单元的行、列索引号。 例如: Dim CRow As Integer=DataGrid1.CurrentRowIndex '当前选定行的索引 Dim CCol As Integer=DataGrid1.CurrentCell.ColumnNumber() '当前单元的列索引 Dim CRow As Integer=DataGrid1.CurrentCell.RowNumber() '当前单元的行索引
7.3 数据集 ⒉应用DataGrid显示DataSet数据的实例 以student数据库的Grade_Tab表为数据源,创建如图所示的窗体,通过窗体中DataGrid控件显示数据源的数据。{通过媒体演示教学}
7.3 数据集 ⒊应用DataSet更新数据库的方法 ⑴ 设置DataAdapter的Command型属性 方法: 用.NET数据提供者提供的CommandBuilder类方法,它能自动生成其他三个修改类Command对象。