《数据访问模型》PPT课件.ppt
第9章 ADO.NET数据访问模型9.1 什么是什么是ADO.NET ADO.NET(ActiveX Data Objects)是.NET Framework中的一系列类库,它能够让开发人员更加方便的在应用程序中使用和操作数据。在ADO.NET中,大量复杂的数据操作的代码被封装起来,所以当开发人员在ASP.NET应用程序开发中,只需要编写少量的代码即可处理大量的操作。9.1.1 设计目标ADO.NET ADO.NET 提供对提供对 Microsoft SQL Server Microsoft SQL Server 等数据等数据源以及通过源以及通过 OLE DB OLE DB 和和 XML XML 公开的数据源的一公开的数据源的一致访问。应用程序可以使用致访问。应用程序可以使用ADO.NETADO.NET来连接到这来连接到这些数据源,并检索、操作和更新数据。些数据源,并检索、操作和更新数据。ADO.NET ADO.NET 有效地从数据操作中将数据访问分解有效地从数据操作中将数据访问分解为多个可以单独使用或一前一后使用的不连续组为多个可以单独使用或一前一后使用的不连续组件。包含用于连接到数据库、执行命令和检索结件。包含用于连接到数据库、执行命令和检索结果等操作的果等操作的.NET.NET数据提供程序。数据提供程序。9.1.2 数据访问模型SqlConnectionSqlConnection:该对象表示与数据库服务器进行连接。:该对象表示与数据库服务器进行连接。SqlCommandSqlCommand:该对象表示要执行的:该对象表示要执行的SQLSQL命令。命令。DataTableDataTable:该对象表示内存中数据的一个表。:该对象表示内存中数据的一个表。DataSetDataSet对对象中可以包含多个象中可以包含多个DataTableDataTable对象。对象。DataSetDataSet:该对象表示数据集对象,以:该对象表示数据集对象,以XMLXML的形式存在于的形式存在于内存中。内存中。SqlDataAdapterSqlDataAdapter:该对象具有填充命令中的:该对象具有填充命令中的DataSetDataSet对象对象的能力。的能力。SqlDataReaderSqlDataReader:该对象是大多数有效的情况下读取数据:该对象是大多数有效的情况下读取数据的好的方式。的好的方式。SqlParameterSqlParameter;该对象代表了一个将被命令中标记所代替;该对象代表了一个将被命令中标记所代替的值。的值。9.2 SqlConnection连接对象SqlConnectionSqlConnection对象表示与对象表示与SQL ServerSQL Server数据源的一个唯一数据源的一个唯一的会话。对于客户端的会话。对于客户端/服务器数据库系统,它等效于到服服务器数据库系统,它等效于到服务器的网络连接。务器的网络连接。SqlConnectionSqlConnection与与SqlDataAdapterSqlDataAdapter和和SqlCommandSqlCommand一起使用,可以在连接一起使用,可以在连接 Microsoft SQL Microsoft SQL Server Server 数据库时提高性能。数据库时提高性能。连接连接SQL ServerSQL Server数据库服务器有两种身份认证模式:数据库服务器有两种身份认证模式:WindowsWindows身份认证和身份认证和SQL ServerSQL Server身份认证。身份认证。WindowsWindows身份验证就是使用当前访问操作系统的用户,直接登录身份验证就是使用当前访问操作系统的用户,直接登录SQL ServerSQL Server,如同用钥匙进入了房子大门就可以直接进入各个房,如同用钥匙进入了房子大门就可以直接进入各个房间。间。SQL ServerSQL Server身份验证就是单独设置访问身份验证就是单独设置访问SQL ServerSQL Server的权限,如同的权限,如同进入房子之后还需要房间的钥匙。进入房子之后还需要房间的钥匙。9.3 SqlCommand命令对象命令对象 ADO.NETADO.NET中,中,SqlCommandSqlCommand对象可以使用数据库对象可以使用数据库SQLSQL命令直接与数据源进行通信。例如,当需要命令直接与数据源进行通信。例如,当需要执行一条插入语句,或者删除数据库中的某条数执行一条插入语句,或者删除数据库中的某条数据的时候,就需要使用到据的时候,就需要使用到SqlCommandSqlCommand对象。对象。SqlCommandSqlCommand对象对数据执行具体操作常用的方对象对数据执行具体操作常用的方法有:法有:ExecuteScalar()ExecuteScalar()ExecuteReader()ExecuteReader()ExecuteNonQuery()ExecuteNonQuery()9.4 SqlDataReader数据读取对象数据读取对象 SqlDataReaderSqlDataReader对象是用来读取数据的方式,但对象是用来读取数据的方式,但是不能使用它来写入数据。是不能使用它来写入数据。SqlDataReaderSqlDataReader能够能够以只向前的顺序方式从以只向前的顺序方式从SqlDataReaderSqlDataReader对象中进对象中进行读取。只要已经读取了某些数据,就必须保存行读取。只要已经读取了某些数据,就必须保存它们,因为将不能够返回并再一次读取它。为了它们,因为将不能够返回并再一次读取它。为了再次读取那行,应该创建一个新的再次读取那行,应该创建一个新的SqlDataReaderSqlDataReader实例并且再次从数据流中读取它。实例并且再次从数据流中读取它。得到得到SqlDataReaderSqlDataReader对象与实例化其它对象与实例化其它ADO.NETADO.NET对象稍微有些不同。必须用一个对象稍微有些不同。必须用一个SqlCommandSqlCommand对对象调用象调用ExecuteReader()ExecuteReader()方法,如下代码所示。方法,如下代码所示。9.5 DataTable数据表对象DataTable类是.NET Framework类库中System.Data命名空间的成员。可独立创建和使用DataTable,也可以作为 DataSet 的成员创建和使用。在DataSet对象中通过Tables属性访问DataSet中表的集合。9.6 DataSet数据集对象数据集对象 DataSet是ADO.NET框架的主要组件,是数据以XML的形式驻留于内存的表示形式,它把从数据源中检索到的数据存放在内存的缓存中。DataSet由表、关系和约束的集合组成。数据可以来自本地基于.NET的应用程序,也可从数据源(例如,使用SqlDataAdapter的Microsoft SQL Server)中导入。9.7 SqlDataAdapter数据适配器对象数据适配器对象 SqlDataAdapterSqlDataAdapter对象是用于填充对象是用于填充DataSetDataSet和更新和更新SQL SQL ServerServer数据库的一组数据命令和一个数据库连接。在创建数据库的一组数据命令和一个数据库连接。在创建了数据库连接后,就需要对数据集了数据库连接后,就需要对数据集DataSetDataSet进行填充,在进行填充,在这里就需要使用这里就需要使用SqlDataAdapterSqlDataAdapter对象。对象。int Fill(DataSet dataSet,string tableName)int Fill(DataSet dataSet,string tableName):使用:使用SELECTSELECT语句从数据源中检索数据,将其填充到语句从数据源中检索数据,将其填充到DataSetDataSet对象中,返回值为在对象中,返回值为在DataSetDataSet中成功添加的行数。与中成功添加的行数。与SELECTSELECT命令关联的命令关联的SqlConnection SqlConnection 对象必须有效,但不对象必须有效,但不需要将其打开。如果调用需要将其打开。如果调用Fill()Fill()之前之前SqlConnectionSqlConnection已关闭,已关闭,则将自动打开连接以检索数据,然后自动再将其关闭。如则将自动打开连接以检索数据,然后自动再将其关闭。如果调用果调用Fill()Fill()之前连接已打开,它将保持打开状态。之前连接已打开,它将保持打开状态。9.8 SqlParameter参数对象SqlParameter表示SqlCommand的参数,也可以是它到DataSet列的映射。使用参数化查询分如下面三步:(1 1)使用)使用ParametersParameters构建构建SqlCommandSqlCommand命令命令字符串;字符串;(2 2)声明)声明SqlParameterSqlParameter对象,将适当的值赋对象,将适当的值赋给它;给它;(3 3)将)将SqlParameterSqlParameter对象赋值给对象赋值给SqlCommandSqlCommand对象的对象的ParametersParameters属性。属性。9.9 存储过程存储过程 存储过程是由一些SQL语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序调用,也可以被另一个过程或触发器调用。它的参数可以被传递和返回。与应用程序中的函数过程类似,存储过程可以通过名字来调用,而且它们同样有输入参数和输出参数。9.9.2 创建存储过程存储过程声明语法如下所示:存储过程声明语法如下所示:CREATE PROCEDURE procedure_name;numberCREATE PROCEDURE procedure_name;numberparameter data_typeparameter data_typeVARYING=defaultOUTPUTVARYING=defaultOUTPUT,.n,.nWITHWITHRECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTIONRECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTIONFORREPLICATIONFORREPLICATIONASASsql_statement.nsql_statement.n9.9.3 调用存储过程SqlCommand类型能够被存储过程所使用。需要有两件事情发生:首先让SqlCommand对象知道哪一个存储过程被执行,其次告诉SqlCommand对象它执行的是存储过程。