单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,12,章,ADO.NET,数据库访问技术,本章重点,ADO.NET,组件,连接数据库,获取数据,填充数据集,修改数据库,12.1 创立数据库,在编写ASP.NET 4.0网站应用程序之前,首先要做的是设计和创立数据库。,虽然ADO.NET可以用来访问任何类型的数据库,但由于SQL Server数据库也是微软公司的主打产品,和Vistual Studio开发环境有着先天上的契合性,所以使用SQL Server 数据库管理系统对Visual Studio 开发环境而言是最好的组合。,12.2 ADO.NET,概述,ASP.NET,提供了,ADO.NET,技术,它是,ASP.NET,应用程序与数据库进行交互的一种技术。,ADO.NET,技术把对数据库的操作分为几个步骤,并为每个步骤提供对象来封装操作过程,从而使对数据库的操作变得简单易行。,12.2 ADO.NET,概述,ADO.NET组件将数据访问与数据处理别离。通过两个主要的组件:,1.ADO.NET体系结构的一个核心元素是.NET数据提供程序,它是专门为数据处理以及快速地只进、只读访问数据而设计的组件,包括Connection、Command、DataReader和DataAdapter对象的组件。,2.DataSet是ADO.NET体系结构中另一个核心组件,它是专门为各种数据源的数据访问独立性而设计的,所以它可以用于多个不同的数据源、XML数据或管理应用程序的本地数据,如内存中的数据高速缓存。,12.3,连接数据库,.NET Framework,数据提供程序使用,Connection,对象提供与,Microsoft SQL Server 7.0,版或更高版本的连接。,Connection,对象根据不同的数据源可以分为以下几类:,。,。,。,Syste,。,12.3,连接数据库,SqlConnection连接字符串常用参数:,Data Source|ServerSQL Server:数据库效劳器的名称,可以是local、localhost,也可以是具体的名字。,Initial Catalog:数据库的名称。,Integrated Security:决定连接是否是平安的,取值可以是True、False或SSPI。,User ID:SQL Server登录帐户。,Password:SQL Server帐户的登录密码。,12.3,连接数据库,使用构造函数来初始化SqlConnection对象,在创立连接时,需要引用Syatem.Data和命名空间。,SqlConnection的构造函数定义如下所示:,public SqlConnection,string connectionString,以上的参数connectionString指定了用于翻开SQL Server数据库的连接。,12.3,连接数据库,使用SqlConnection对象创立和翻开数据库连接,例如代码:,1.string ConnStr=server=localhost;Integrated Security=True;database=SuperMarket;,2.SqlConnection sqlConn=new SqlConnection(ConnStr);,3.sqlConn.Open();,第1行代码的变量ConnStr用来存储数据库连接字符串。server指定了SQL Serverr效劳器的名字,这里设置localhost表示为本机;Integrated Security表示采用信任连接方式,即用Windows组帐号登录至SQL Server数据库效劳器;Database或Initial Catalog用于设置登录到哪个数据库。,第2行使用连接字符串ConnStr来定义SqlConnection对象sqlConn。,第3行调用方法Open()翻开数据库连接。,12.4,获取数据,12.4.1,Command,对象,Command,对象使用,SELECT,、,INSERT,、,UPDATE,、,DELETE,等,SQL,命令与数据源通信,此外,,Command,对象还可以调用存储过程操作数据库。根据不同的数据源,可以分为四类:,SqlCommand,:用于对,SQL Server,数据库执行命令。,OleDBCommand,:用于对支持,OleDB,的数据库执行命令。,O,dbcCommand,:用于支持,Odbc,的数据库执行命令。,OracleComand,:用于对,Oracle,数据库执行命令。,12.4,获取数据,12.4.1 Command,对象,SqlCommand,类可以用来对,SQL Server,数据库执行的一个,Transact-SQL,语句或存储过程。,SqlCommand,类的常用属性:,12.4,获取数据,12.4.1 Command,对象,SqlCommand,的常用方法:,12.4,获取数据,12.4.1 Command,对象,可以使用构造函数生成,SqlCommand,对象,也可以使用,SqlConnection,对象的,CreateCommand(),函数生成。,SqlCommand,的构造函数参看下表:,12.4,获取数据,12.4.2 DataReader对象,可以使用DataReader从数据库中检索只读、只进的数据流。,所谓“只读,是指在数据阅读器DataReader上不可更新、删除、增加记录。“只进是指记录的接收是顺序进行且不可后退的。,数据阅读器DataReader接收到的数据是以数据库的记录为单位的。查询结果在查询执行时返回,并存储在客户端的网络缓冲区中,直到用户使用DataReader的Read方法对它们发出请求。,使用DataReader可以提高应用程序的性能,原因是它只要数据可用就立即检索数据,并且默认情况下一次只在内存中存储一行,减少了系统开销。,12.4,获取数据,12.4.2 DataReader,对象,SqlDataReader,的常用属性如下表所示:,12.4,获取数据,12.4.2 DataReader,对象,SqlDataReader,的常用方法如下表所示:,12.4,获取数据,12.4.2 DataReader对象,在创立Command对象的一个实例之后,用户可以通过对命令调用ExecuteReader方法来创立DataReader,该方法从在Command对象中指定的数据源检索一些行,这时,DataReader就会被来自数据库的记录所填充。以SqlDataReader对象为例,数据阅读器DataReader的定义和创立格式为:,SqlDataReader 数据阅读器变量名Command变量名.ExecuteReader();,12.4,获取数据,12.4.2 DataReader对象,使用DataReader对象的Read方法可从查询结果中获取行。通过向DataReader传递列的名称或序号引用,可以访问返回行的每一列。,为了实现最正确性能,DataReader 提供了一系列方法,使用户能够访问其本机数据类型GetDateTime、GetDouble、GetGuid、GetInt32 等的列值。DataReader 提供未缓冲的数据流,该数据流使过程逻辑可以有效地按顺序处理从数据源中返回的结果。由于数据不在内存中缓存,所以在检索大量数据时,DataReader 是一种适合的选择。,12.5,填充数据集,12.5.1 DataAdapter,对象,DataAdapter,对象充当数据库和,ADO.NET,对象模型中非连接对象之间的桥梁,能够用来保存和检索数据。,DataAdapter,对象类的,Fill,方法用于将查询结果引入,DataSet,或,DataTable,中,以便能够脱机处理数据。根据不同的数据源,DataAdapter,对象,可以分为四类:,Sql,DataAdapter,:用于对,SQL Server,数据库执行命令。,OleDB,DataAdapter,:用于对支持,OleDB,的数据库执行命令。,O,dbcDataAdapter,:用于支持,Odbc,的数据库执行命令。,OracleDataAdapter,:用于对,Oracle,数据库执行命令。,12.5,填充数据集,12.5.1 DataAdapter,对象,SqlDataAdapter,对象的属性如下表所示:,12.5,填充数据集,12.5.1 DataAdapter,对象,可以使用构造函数生成,SqlDataAdapter,对象。,SqlDataAdapter,的构造函数 如下表所示:,12.5,填充数据集,12.5.1 DataAdapter,对象,使用数据适配器,SqlDataAdapter,的一般步骤如下:,1.,建立数据库连接。,2.,建立,SqlCommand,对象,设置要执行的,SQL,语句,3.,建立并实例化一个,SqlDataAdapter,对象。,4.,建立一个,DataSet,对象,用于接收执行,SQL,命令返回,的数据集。,5.,填充数据集。,6.,绑定数据控件。,7.,关闭数据库连接。,12.5,填充数据集,12.5.2 DataSet,对象,DataSet,是,ADO.NET,的核心组件之一,也是各种开发基于,.NET,平台程序语言开发数据库应用程序最常接触的类。,DataSet,在,ADO.NET,对实现从数据库抽取数据起到关键作用,在从数据库完成数据抽取后,,DataSet,就是数据的存放地,它是各种数据源中的数据在计算机内存中映射成的缓存,,DataSet,可以看成是一个数据容器。,DataSet,也被称为内存中的数据库,因为在,DataSet,可以包含很多数据表以及这些数据表之间的关系。,DataSet,在客户端实现读取、更新数据库等过程中起到了中间部件的作用。,12.5,填充数据集,12.5.2 DataSet,对象,DataSet,从数据源中获取数据以后就断开了与数据源之间的连接。允许在,DataSet,中定义数据约束和表关系,增加、删除和编辑记录,还可以对,DataSet,中的数据进行查询、统计等。当完成了各项操作以后还可以把,DataSet,中的数据送回数据源。,DataSet,的产生满足了多层分布式程序的需要,它能够在断开数据源的情况下对存放在内存中的数据进行操作,这样可以提高系统整体性能,而且有利于扩展。,DataSet,中经常使用的类包括:,DataTable,、,DataRow,、,DataColumn,、,DataRelation,。,12.5,填充数据集,12.5.2 DataSet对象,创立DataSet的方式有两种,第一种方式如下代码所示:,DataSet dataSet=new DataSet();,这种方式是先建立一个空的数据集,然后再把建立的数据表放到该数据集里。,另外一种方式那么采用这样的声明形式,如以下代码所示:,DataSet dataSet=new DataSet(“表名);,这种方式是先建立数据表,然后再建立包含数据表的数据集。,12.5,填充数据集,12.5.2 DataSet,对象,DataSet,的常用属性如下表所示:,12.5,填充数据集,12.5.2 DataSet,对象,DataSet,的常用方法如下表所示:,12.6,修改数据,利用,SqlCommend,对象的,ExecuteNonQuery,方法可以把修改的数据提交到数据库中保存。,完成数据库内容的增加、删除和修改的操作。具体的执行步骤如下所示:,1.,建立数