1、 19.1 ADO.NET与与.NET 19.2 ADO.NET与与ADO 19.3 深入深入ADO.NET 19.4 数据控件数据控件 19.5 数据绑定控件数据绑定控件 19.6 小结小结19.1 ADO.NET与.NETADO.NET由微软公司推出,基于由微软公司推出,基于.NET平台,平台,面向分布式,是以面向分布式,是以XML数据格式为核心的数据格式为核心的一种数据库访问技术,其主要特点如下。一种数据库访问技术,其主要特点如下。ADO.NET是是.NET框架中非常重要的一部分,框架中非常重要的一部分,且且ADO.NET必须在必须在.NET框架支持下才能运行。框架支持下才能运行。XML
2、是是ADO.NET的基础,即从数据源里获取的基础,即从数据源里获取的数据都是以的数据都是以XML格式保存。格式保存。ADO.NET的主要功能就是提供数据访问类。的主要功能就是提供数据访问类。19.1 ADO.NET与.NET ADO.NET体系结构体系结构 19.2 ADO.NET与ADO19.2.1 ADO概述概述数据访问方式的发展阶段:数据访问方式的发展阶段:ODBC(Open Database Connectivity)OLEDB(Object Linking and Embedding Database)ADO(ActiveX Data Objects)ADO的常用的常用3个对象如下。
3、个对象如下。Connection对象对象Command对象对象Recordset对象对象19.2.1 ADO概述典型的典型的ADO对象编程步骤:对象编程步骤:连接到数据源。连接到数据源。指定访问数据源的命令,可以同时指定变量参指定访问数据源的命令,可以同时指定变量参数,通常会涉及到数,通常会涉及到Command对象。对象。执行命令,如果命令使数据按表中行的形式返执行命令,如果命令使数据按表中行的形式返回,则将这些数据存储在易于检查、操作或更回,则将这些数据存储在易于检查、操作或更改的缓存改的缓存Recordset中。中。在适当情况下,可以通过修改缓存行的内容来在适当情况下,可以通过修改缓存行的
4、内容来更新数据源。更新数据源。结束操作,释放数据连接结束操作,释放数据连接Connection和内存和内存中的缓存中的缓存Recordset,关闭操作命令,关闭操作命令Command。19.2.2 ADO.NET与ADO的关系 ADO与与ADO.NET既相似也有区别,它们的相似之处是都既相似也有区别,它们的相似之处是都能够编写对数据库服务器中的数据进行访问和操作的应用能够编写对数据库服务器中的数据进行访问和操作的应用程序,并且易使用、高速度、低内存消耗且占用磁盘空间程序,并且易使用、高速度、低内存消耗且占用磁盘空间较少,支持建立基于客户端较少,支持建立基于客户端/服务器和服务器和Web的应用程
5、序的的应用程序的功能。它们的主要区别如下。功能。它们的主要区别如下。ADO使用使用OLE DB接口并基于微软的接口并基于微软的COM技术,而技术,而ADO.NET拥拥有自己的有自己的ADO.NET接口并且基于微软的接口并且基于微软的.NET体系架构。体系架构。ADO以以Recordset存储,而存储,而ADO.NET则以则以DataSet表示。表示。总之,由于总之,由于ADO使用使用COM技术,这就要求所使用的数据技术,这就要求所使用的数据类型必须符合类型必须符合COM规范,而规范,而ADO.NET基于基于XML格式,格式,XML灵活多变的基于文本的结构使得它能够应用于相当广灵活多变的基于文本
6、的结构使得它能够应用于相当广泛的网络作业,并且不需要再做泛的网络作业,并且不需要再做COM编排导致的数据类编排导致的数据类型转换,从而提高了平台互用性和整体性能。型转换,从而提高了平台互用性和整体性能。19.3 深入ADO.NET 19.3.1 .NET数据提供程序数据提供程序.NET Framework数据提供程序用于连接数据提供程序用于连接到数据库、执行命令和检索结果。到数据库、执行命令和检索结果。.NET Framework提供了如下几个提供了如下几个.NET Framework数据提供程序。数据提供程序。OLE DB.NET Framework数据提供程序。数据提供程序。SQL Ser
7、ver.NET Framework数据提供程序。数据提供程序。ODBC.NET Framework数据提供程序。数据提供程序。Oracle.NET Framework数据提供程序。数据提供程序。19.3.1 .NET数据提供程序.NET Framework数据提供程序提供了数据提供程序提供了4个核心类,个核心类,这这4个核心类其功能如下。个核心类其功能如下。Connection类:建立与特定数据源的连接。类:建立与特定数据源的连接。Command类:对数据源执行数据库命令,用于返回类:对数据源执行数据库命令,用于返回数据、修改数据、运行存储过程以及发送或检索参数数据、修改数据、运行存储过程以及
8、发送或检索参数信息等。信息等。DataReader类:从数据源中读取只向前的只读数据流,类:从数据源中读取只向前的只读数据流,它是一个简易的数据流。它是一个简易的数据流。DataAdapter类:用于将数据源的数据填充至类:用于将数据源的数据填充至DataSet数据集并解析更新数据集。可以说,数据集并解析更新数据集。可以说,DataAdpater类类是是.NET数据提供程序与数据提供程序与DataSet之间的一座桥梁。之间的一座桥梁。19.3.2 Connection类Connection类用于连接数据库,也可使用类用于连接数据库,也可使用Command类,它会隐含创建一个类,它会隐含创建一个
9、Connection对象。对象。在使用在使用Connection类时,一般可以使用无类时,一般可以使用无参数的构造函数创建参数的构造函数创建Connection类实例,类实例,然后设置然后设置ConnectionString属性,也可以属性,也可以直接使用带参数的构造函数创建直接使用带参数的构造函数创建Connection类实例。类实例。19.3.2 Connection类示例:示例:使用无参数的构造函数来创建使用无参数的构造函数来创建Connection对象,对象,其语法形式如下。其语法形式如下。string str=Data Source=localhost;Initial Catalog
10、=book;Persist Security Info=True;User ID=admin;Password=123;SqlConnection sqlcon=new SqlConnection();Sqlcon.ConnectionString=str;利用带参数的构造函数创建利用带参数的构造函数创建SqlConnection实例,实例,其语法形式如下。其语法形式如下。string str=Data Source=localhost;Initial Catalog=book;Persist Security Info=True;User ID=admin;Password=123;SqlC
11、onnection sqlcon=new SqlConnection(str);19.3.2 Connection类SqlConnection连接字符串中各项的意义如下。连接字符串中各项的意义如下。Data Source:设置要连接的:设置要连接的SQL Server实例所在的实例所在的服务器名或网络地址,服务器名或网络地址,localhost表示本机。表示本机。Initial Catalog:设置要连接的数据库名。:设置要连接的数据库名。Persist Security Info:表示是否保存安全信息。:表示是否保存安全信息。User ID:设置数据库访问者的姓名。:设置数据库访问者的姓名。
12、PassWord:设置数据库访问者的密码。:设置数据库访问者的密码。Connection对象的常用方法如下。对象的常用方法如下。Open()方法:建立数据库连接。当创建完方法:建立数据库连接。当创建完Connection对象之后,应调用对象之后,应调用Open()方法才能建立数据库连接。方法才能建立数据库连接。Close()方法:断开数据库连接。当数据库连接使用完方法:断开数据库连接。当数据库连接使用完毕后,应调用毕后,应调用Close()方法及时断开数据库连接。方法及时断开数据库连接。19.3.3 Command类 Command类用于完成对数据源的各种操作,包括查询、插入、删除、类用于完成
13、对数据源的各种操作,包括查询、插入、删除、更新操作。可以使用更新操作。可以使用SQL语句来完成这些操作。语句来完成这些操作。示例:示例:使用无参数构造函数来创建使用无参数构造函数来创建SqlCommand对象,例如下列代码。对象,例如下列代码。SqlCommand command=new SqlCommand();command.CommandType=CommandType.Text;command.Connection=myconn;使用带参数构造函数创建使用带参数构造函数创建SqlCommand对象,参数为查询对象,参数为查询Sql语句,语句,而且只能是查询语句,例如下列代码。而且只能是
14、查询语句,例如下列代码。string sqlstr=select*from book;SqlCommand command=new SqlCommand(sqlstr);command.CommandType=CommandType.Text;command.Connection=myconn;使用带参数构造函数创建使用带参数构造函数创建SqlCommand对象,参数为查询对象,参数为查询Sql语句且语句且只能是查询语句和只能是查询语句和SqlConnection对象,例如下列代码。对象,例如下列代码。string sqlstr=select*from book;SqlCommand comm
15、and=new SqlComman 19.3.3 Command类 Command对象的常用属性如下。对象的常用属性如下。CommandType属性:表示如何解释指令字符串,属性值为属性:表示如何解释指令字符串,属性值为Text(SQL文本命令,默认)、文本命令,默认)、StoredProcedure(存储过程)。(存储过程)。CommandText属性:当属性:当CommandType为为Text时,时,CommandText为为SQL语句;当语句;当CommandType为为StoredProcedure时,时,CommandText为存储过程名称。为存储过程名称。Connection属性
16、:表示属性:表示Command类使用的类使用的Connection对象。对象。Parameters属性:该属性用于表示与属性:该属性用于表示与SqlCommand对象相关联对象相关联的参数的集合。的参数的集合。Command对象的常用方法如下。对象的常用方法如下。ExecuteReader方法:返回方法:返回DataReader对象,包含一个或多个对象,包含一个或多个行。行。ExecuteNonQuery方法:执行非查询的方法:执行非查询的SQL语句并返回受影响语句并返回受影响的行数。的行数。ExecuteScalar方法:返回结果集中第一行的第一列,常用于当方法:返回结果集中第一行的第一列,
17、常用于当SQL语句查询聚合值时,返回聚合值,例如查询某班的学生人数。语句查询聚合值时,返回聚合值,例如查询某班的学生人数。19.3.3 Command类示例:示例:static void Main(string args)string myConStr=Data Source=localhost;Initial Catalog=stuinfo;Persist Security Info=false;User ID=admin;Password=123;SqlConnection myCon=new SqlConnection(myConStr);myCon.Open();string sql=
18、insert into stutable values(03,王珊王珊,信息信息工程学院工程学院);SqlCommand myCom=new SqlCommand(sql,myCon);myCom.CommandType=CommandType.Text;myCom.ExecuteNonQuery();myCon.Close();19.3.4 DataSet类DataSet是物理数据库在本地内存中的表示形式,是物理数据库在本地内存中的表示形式,通过使用数据集可以在无连接的情况下访问数据通过使用数据集可以在无连接的情况下访问数据库。库。DataSet中包含的数据对象及其相互间的关系:中包含的数据
19、对象及其相互间的关系:数据表(数据表(DataTable):数据源中的数据表在内存中的):数据源中的数据表在内存中的表示。表示。数据列(数据列(DataColumn):用于描述):用于描述DataTable中的列中的列(记录)。(记录)。数据行(数据行(DataRow):用于描述):用于描述DataTable中的行中的行(记录)。(记录)。表间关系(表间关系(DataRelation):表示不同表中两列数据):表示不同表中两列数据间的关系(如主键与外键)。间的关系(如主键与外键)。约束(约束(Constraint):定义一些在):定义一些在DataTable中添加和中添加和操作数据要遵守的规则
20、。操作数据要遵守的规则。19.3.4 DataSet类填充数据集填充数据集 调用调用DataAdapter对象的对象的Fill方法方法示例:示例:using System.Data.SqlClient;private void Form1_Load(object sender,EventArgs e)string Str=Data Source=localhost;Initial Catalog=book;Persist Security Info=false;User ID=admin;Password=123;string Sql=select*from information;SqlCo
21、nnection sqlcon=new SqlConnection(Str);DataSet Mydata=new DataSet();SqlDataAdapter Myadapter=new SqlDataAdapter(Sql,sqlcon);Myadapter.Fill(Mydata,information);sqlcon.Close();19.3.4 DataSet类 访问数据集访问数据集格式格式1:数据集对象名:数据集对象名.Tables数据表名数据表名.Rowsn列名列名 格式格式2:数据集对象名:数据集对象名.Tables数据表名数据表名.Rowsn.ItemsArrayk 更新
22、数据集:对数据集的更新包括向数据表中添加一行数更新数据集:对数据集的更新包括向数据表中添加一行数据、从数据表中删除一行数据及修改数据表中的某一条记据、从数据表中删除一行数据及修改数据表中的某一条记录的列值。录的列值。更新数据源更新数据源:当更新数据集后,可以通过:当更新数据集后,可以通过DataAdapter对象的对象的Update()方法同步更新数据源。方法同步更新数据源。注意使用注意使用Update()方法更新数据源之前,需要设置方法更新数据源之前,需要设置DataAdapter对象的命令属性,包括对象的命令属性,包括InsertCommand、DeleteCommand和和UpdateC
23、ommand,有了这些命令属性,有了这些命令属性,DataAdapter对象的对象的Update()方法才会有效,否则会产生异常。方法才会有效,否则会产生异常。DataReader类用于从数据源中检索只读、类用于从数据源中检索只读、只进的数据流,其最大的特点是只进的数据流,其最大的特点是DataReader对象以对象以“基于连接基于连接”的方式的方式访问数据库。访问数据库。DataReader类的常用方法类的常用方法:Read、NextResult、Close、GetName、GetString、GetValues 19.3.5 DataReade类示例:示例:static void Main
24、(string args)string Str=Data Source=localhost;Initial Catalog=book;Persist Security Info=false;User ID=admin;Password=123;SqlConnection Con=new SqlConnection(Str);string comStr=select 编号编号,书名书名 from information;SqlCommand Com=new SqlCommand(comStr,Con);Con.Open();SqlDataReader rd=Com.ExecuteReader()
25、;do Console.WriteLine(n);Console.WriteLine(t0ttt1,rd.GetName(0),rd.GetName(1);while(rd.Read()Console.WriteLine(t0tt1,rd.GetString(0),rd.GetString(1);while(rd.NextResult();rd.Close();Con.Close();Console.Read();19.3.5 DataReade类DataAdapter类也称为数据适配器,是类也称为数据适配器,是DataSet和数据源之间检索和保存数据的桥梁,用于处理和数据源之间检索和保存数据
26、的桥梁,用于处理连接的细节。连接的细节。DataAdapter既负责从数据库中检既负责从数据库中检索数据并填充数据集索数据并填充数据集DataSet,又负责将数据集,又负责将数据集DataSet中对数据的更改回送到数据库。中对数据的更改回送到数据库。DataAdapter对象包含对象包含4个常用属性,分别为个常用属性,分别为SelectCommand、InsertCommand、UpdateCommand、DeleteCommand。这。这4个个属性均为属性均为Command对象,对象,DataAdapter通过上通过上述述4个属性来对数据库进行查询、插入、更新和个属性来对数据库进行查询、插入
27、、更新和删除操作。上述删除操作。上述4种对象初始值均为种对象初始值均为null,赋值后,赋值后才能使用。才能使用。19.3.6 DataAdapter类19.3.6 DataAdapter类示例:示例:static void Main(string args)string Str=server=SISSQLEXPRESS;Initial Catalog=book;Persist Security Info=False;User ID=admin;Password=123;SqlConnection conn=new SqlConnection(Str);conn.Open();string c
28、omStr=select*from information;SqlCommand comm=new SqlCommand(comStr,conn);SqlDataAdapter myDA=new SqlDataAdapter();myDA.SelectCommand=comm;DataSet myDS=new DataSet();myDA.Fill(myDS,information);comm.CommandText=DELETE FROM information WHERE 编号编号=TP0003;myDA.DeleteCommand=comm;myDA.Fill(myDS,informat
29、ion);myDA.Update(myDS,information);conn.Close();myDS.Dispose();19.3.7 ADO.NET原理剖析 ADO.NET的数据访问策略有两种,一种是将数据记录缓的数据访问策略有两种,一种是将数据记录缓存于数据集(存于数据集(Dataset)中;另一种是直接访问数据库并)中;另一种是直接访问数据库并使用数据读取器(使用数据读取器(DataReader)来读取数据记录。)来读取数据记录。使用使用ADO.NET开发数据库应用程序的一般步骤如下。开发数据库应用程序的一般步骤如下。导入相应的命名空间。导入相应的命名空间。选择使用的数据源,即确定将
30、使用的选择使用的数据源,即确定将使用的.NET Framework数据提供数据提供程序。程序。使用使用Connection对象建立与数据源的连接。对象建立与数据源的连接。使用使用Command对象执行对数据源的操作命令,通常是对象执行对数据源的操作命令,通常是SQL命令。命令。使用数据集对获得的数据进行操作,需使用使用数据集对获得的数据进行操作,需使用DataReader、DataSet等对象。等对象。使用各种数据控件向用户显示数据。使用各种数据控件向用户显示数据。19.4 数据控件19.4.1 常用的数据控件常用的数据控件DataSet控件:它是一个集合对象,可以包含控件:它是一个集合对象,
31、可以包含任意数量的表和视图,还可以包含所有表的约任意数量的表和视图,还可以包含所有表的约束、索引、关系及存储过程等。束、索引、关系及存储过程等。BindingSource控件:主要用于连接数据库,控件:主要用于连接数据库,通过该控件,可以将所有通过该控件,可以将所有Windows窗体控件绑窗体控件绑定到数据源。定到数据源。BindingNavigator控件:绑定数据源后,可以控件:绑定数据源后,可以实现数据导航。实现数据导航。DataGridView控件:主要用于显示后台数据控件:主要用于显示后台数据库的数据,通常以浏览表格显示库的数据,通常以浏览表格显示。19.4.2 数据源控件Bindi
32、ngSource控件其实并不是真正控件其实并不是真正意义上的数据源,而是窗体控件和数意义上的数据源,而是窗体控件和数据源之间的桥梁,其主要功能为将窗据源之间的桥梁,其主要功能为将窗体中的控件绑定到数据源上。体中的控件绑定到数据源上。19.5 数据绑定控件 19.5.1 数据绑定控件概述数据绑定控件概述 数据绑定就是使控件与数据源的数据绑定在一起,便于数数据绑定就是使控件与数据源的数据绑定在一起,便于数据访问,而控件可以绑定到几乎所有包含数据的结构,且据访问,而控件可以绑定到几乎所有包含数据的结构,且可以通过绑定的数据设置控件的任何属性。数据绑定可分可以通过绑定的数据设置控件的任何属性。数据绑定
33、可分为简单数据绑定和复杂数据绑定。为简单数据绑定和复杂数据绑定。简单数据绑定指将一个控件绑定到单个数据元素,通常绑简单数据绑定指将一个控件绑定到单个数据元素,通常绑定到数据库的某一个字段。支持简单数据绑定的控件有定到数据库的某一个字段。支持简单数据绑定的控件有TextBox控件、控件、Label控件等只显示单个值的控件。控件等只显示单个值的控件。复杂数据绑定指将一个控件绑定到多个数据元素,通常绑复杂数据绑定指将一个控件绑定到多个数据元素,通常绑定到数据库中的多条记录,或绑定到多个其他任意类型的定到数据库中的多条记录,或绑定到多个其他任意类型的可绑定数据元素。支持复杂数据绑定的控件有可绑定数据元
34、素。支持复杂数据绑定的控件有DataGirdView控件、控件、ListBox控件、控件、ComBox控件等可控件等可显示多个值的控件,通常使用的是显示多个值的控件,通常使用的是DataGridView控件。控件。19.5.2 简单绑定控件设置简单数据绑定控件的方法非常简单,具体步设置简单数据绑定控件的方法非常简单,具体步骤如下。骤如下。确定已经连接到相应的数据源。确定已经连接到相应的数据源。在在.NET集成开发环境中,把简单绑定控件拖动到窗体集成开发环境中,把简单绑定控件拖动到窗体上,如上,如TextBox控件。控件。在该控件的在该控件的【属性属性】窗口中,展开窗口中,展开DataBindi
35、ng属性,属性,选择相应的属性。如果绑定选择相应的属性。如果绑定Text和和Tag属性,可以直接属性,可以直接选择。如果绑定其他的属性,可以单击选择。如果绑定其他的属性,可以单击Advanced属性属性后的省略号按钮,在弹出的后的省略号按钮,在弹出的【高级数据绑定高级数据绑定】窗口中窗口中选择相应的属性。选择相应的属性。单击要绑定属性的下拉箭头,在下拉列表框中展开要单击要绑定属性的下拉箭头,在下拉列表框中展开要绑定的数据源,从中选择某个数据元素。绑定的数据源,从中选择某个数据元素。19.5.3 复杂绑定控件 DataGirdView控件能够以网格的形式显控件能够以网格的形式显示数据,同时还可以
36、完成数据的添加、删示数据,同时还可以完成数据的添加、删除和更改操作。通常除和更改操作。通常DataGirdView控件控件应包含如下功能。应包含如下功能。可显示和编辑来自多种不同类型数据源的表可显示和编辑来自多种不同类型数据源的表格数据。格数据。可将数据源列的名称自动作为列标头文本。可将数据源列的名称自动作为列标头文本。可用数据源的内容进行填充,可用数据源的内容进行填充,可为数据库表中的每个可见行创建一行。可为数据库表中的每个可见行创建一行。用户单击列标头时,可自动对行进行排序。用户单击列标头时,可自动对行进行排序。19.6 小结 本章首先介绍了本章首先介绍了ADO.NET的概念,并介的概念,并介绍了与绍了与ADO的区别,使读者能够更加深刻的区别,使读者能够更加深刻地理解它们的概念。地理解它们的概念。另外深入详细介绍了另外深入详细介绍了ADO.NET的相关知的相关知识,包括其中的几个常用的类,从它们的识,包括其中的几个常用的类,从它们的属性和方法分别介绍了其使用方法。属性和方法分别介绍了其使用方法。最后介绍了如何使用最后介绍了如何使用ADO.NET访问数据,访问数据,包括使用包括使用ADO.NET对象和对象和ADO.NET控件,控件,简要介绍了数据绑定和数据绑定控件。简要介绍了数据绑定和数据绑定控件。