ASPNET网站建设 ADONET组件及对象模型

上传人:laiq****ong 文档编号:242864262 上传时间:2024-09-10 格式:PPT 页数:125 大小:856KB
返回 下载 相关 举报
ASPNET网站建设 ADONET组件及对象模型_第1页
第1页 / 共125页
ASPNET网站建设 ADONET组件及对象模型_第2页
第2页 / 共125页
ASPNET网站建设 ADONET组件及对象模型_第3页
第3页 / 共125页
点击查看更多>>
资源描述
Click to edit Master title style,Click to edit Master text styles,*,ASP.NET 数据库应用程序开发,*,ASP.NET,数据库应用程序开发,主 编:陈志泊,第,4,章,ADO.NET,组件及对象模型,4.1 ADO.NET,概述,4.2 ADO.NET,对象模型,4.3,数据访问途径,9/10/2024,2,ASP.NET 数据库应用程序开发,4.1 ADO.NET,概述,4.1.1 ADO.NET,与,ADO,区别,ADO.NET,是一组,.NET,类,它使用通用语言运行时,(Common language Runtime),,具有,.NET,框架的所有特,性。,ADO.NET,区别于,ADO,,它不是,ActiveX,组件的集合,而,是采用了全新的数据访问方法,把数据访问的任务与数,据查看和数据操纵分离开来。,下面列出,ADO.NET,与,ADO,的几个主要不同点:,(,1,),ADO,使用,Recordset,对象在内存中存储选择的数据集,而,ADO.NET,使用,DataSet,对象。,Recordset,对象可以比作是单个表,而,DataSet,对象像是包含一个或多个表的数据库。,9/10/2024,3,ASP.NET 数据库应用程序开发,(,2,),ADO.NET,使用了脱机(,disconnected,)数据缓存,可同时在保持数据库连接和断开连接的条件下工作。像,ADO,中那样保持打开连接进行数据访问的代价是很大的,因为服务器必须持续维护每个连接。,(,3,),XML,对,ADO,的支持非常有限,而,ADO.NET,的设计中包含了被广泛接受的,XML,标准,几乎所有涉及数据格式化的任务都用到了,XML,。用户可以使用,XML,进行,Web,信息共享及异构应用数据的交换,,ADO.NET,与,XML,的完全兼容使得它能够与其他兼容,XML,的平台进行互操作。,9/10/2024,4,ASP.NET 数据库应用程序开发,ADO.NET,为使数据存取更为简单和效率而作出的两个最重要的改进:,1,离线数据集(,Disconnected,DataSet,),ADO,的运作是一种在线方式,这意味着不论是浏览或更新数据都必须是实时的。,ADO.NET,则使用离线方式,在访问数据的时候,,ADO.NET,会利用,XML,制作数据的一份副本(快照副本,snapshot,),,ADO.NET,的数据库连接也只有在这段时间需要在线。,2,对,XML,的原生支持(,XML Native Support,),由于,ADO,使用,COM,技术,这就要求所使用的数据类型必须符合,COM,规范,而,ADO.NET,基于,XML,格式,其数据类型更加丰富,并且不需要,COM,编排而导致的数据类型转换,从而提高了整体性能(,DataSet,的原生结构就是,XML,)。,9/10/2024,5,ASP.NET 数据库应用程序开发,4.1.2 .NET,框架中的数据提供者,ADO.NET,有两个核心组件:,DataSet,和,.NET,数据提供者即,.NET Data Provider,,包括,Connection,、,Command,、,DataReader,、,DataAdapter,4,个核心对)。,ADO.NET,的整个体系结构如图,4.1,所示。,9/10/2024,6,ASP.NET 数据库应用程序开发,ADO.NET 1.0,提供了两种默认数据提供者:,SQL,Server .NET Data Provider,和,OLE DB .NET Data,Provider,,它们随,.NET Framework 1.0,一同发行,这两,种数据提供者可访问的数据源如图,4.2,所示,具体说明请,参照表,4.1,所示。,图,4.2 ADO.NET,体系结构图,9/10/2024,7,ASP.NET 数据库应用程序开发,数据提供者,所属命名空间,说明,SQL Server .NET,Data Provider,System.Data.SqlClient,专用于访问,Mircosoft,SQL Server7.0,或更高版本的,SQL Server,数据库,OLE DB .NET,Data Provider,System.Data.OleDb,是通用的数据库访问方法,可用于,访问,Access,、,SQL Server,、,dBase,、,Excel,、,Oracle,等格式的数据库,但,当数据源是以下情况时,建议使用,该提供者:,Mircosoft,SQL Server 6.x,或更早版本的中间层应用程序,Microsoft Access,数据库或者其他支持适应,OLE DB,接口的,OLE DB,数据提供者的单层应用程序,表,4.1 .NET Framework,框架的两种默认数据提供者,9/10/2024,8,ASP.NET 数据库应用程序开发,数据提供者,.NET,数据提供者命名空间,说明,ODBC,的,.NET,Framework,数据,提供者,System.Data.Odbc,开放式数据库连接,(ODBC),的,.NET,数据提供者,用来建立与,ODBC,数据源之间的连接(通常,是一些不具备,OLE DB,提供者的旧,数据源)。,Oracle,的,.NET,Framework,数据,提供者,System.Data.OracleClient,该提供者所提供的服务与,SqlClient,命名空间中的类所提供,的服务类似,它可以直接建立与,Oracle,数据库的连接。,表,4.2,其他,.NET,数据提供者,9/10/2024,9,ASP.NET 数据库应用程序开发,虽然,SQL Server,数据提供者和,OLE DB,数据提供者都,可以访问,SQL Server 7.0,或更高版本的,SQL Server,数据,库,但建议使用,SQL Server,数据提供者,因为在使用,SQL,Server,数据提供者访问时,微软公司进行了效率的调,整,要比使用,OLE DB,提供者访问时效率更高效。当通过,OLE DB,访问时,在到达数据源之前,必须与,OLE DB,服务,组件和,OLE DB,提供者两个抽象层进行交互,因此运行速,度与,SQL Server,数据提供者相比会稍慢一些。,9/10/2024,10,ASP.NET 数据库应用程序开发,尽管不同数据提供者之间有略微差别,但包含在不同,命名空间中的每个类的用法上都非常相似,名称上通过,不同的前缀来进行区别,如,对于,SQL Server,数据提供,者,其实现数据库连接的类名是,SqlConncetion,,属于,System.Data.SqlClient,命名空间,而对于,OLE DB,数据提,供者,其实现数据连接的类名是,OleDbConnection,,在命,名空间,System.Data.OleDb,中定义。因此,用户只要更改,少量的代码,就可以很容易地将一个提供者更改为另一,个提供者。,9/10/2024,11,ASP.NET 数据库应用程序开发,类名,功能说明,SqlConnection,代表与,SQL Server,数据源的连接,SqlCommand,对,SQL Server,数据源执行,Transact-SQL,语句或者存储过程,SqlDataAdapter,用,SQL Server,数据源填充,DataSet,并解析更新,SqlDataReader,从,SQL Server,数据源中读取只向前的、只读的数据流,SqlError,有关,SQL Server,返回的警告或错误信息,SqlException,当,SQL Server,返回警告或错误时引发的异常,SqlParameter,表示命令或存储过程的输入、输出或返回值参数,SqlTransaction,表示对,SQL Server,数据源执行的,Transact-SQL,事务,表,4.3,System.Data.SqlClient,命名空间中的部分类,9/10/2024,12,ASP.NET 数据库应用程序开发,4.2 ADO.NET,对象模型,4.2.1 ADO.NET,对象模型概述,ADO.NET,对象模型中有五个主要的对象,分别是,Connection,对象、,Command,对象、,DataAdapter,对象以及,DataReader,对象组成。,Connection,对象用来连接数据,库,,Command,对象用来执行,SQL,语句,,DataReader,对象用,于读取数据库,,DataAdapter,对象用于执行,SQL,语句同时,打开数据表格(,DataTable,),,DataSet,对象用于存取数,据库。这五个对象之间的关系如图,4.3,所示。,9/10/2024,13,ASP.NET 数据库应用程序开发,图,4.3 ADO.NET,对象模型,9/10/2024,14,ASP.NET 数据库应用程序开发,对于,.NET,的两种数据提供者:,SQL Server .NET,提供,者和,OLE DB .NET,提供者,每组数据提供者内都有,Connection,对象、,Command,对象、,DataAdapter,对象及,DataReader,对象。对于不同的数据提供者,对应上述四,种对象的类的真正名称是不同的,如表,4.4,所示。,类名,OLE DB,数据操作类名,SQL Server,数据操作类名,Connection,对象,OleDbConnection,SqlConnection,Command,对象,OleDbCommand,SqlCommand,DataAdapter,对象,OleDbDataAdapter,SqlDataAdapter,DataReader,对象,OleDbDataReader,SqlDataReader,表,4.4 OLE DB,和,SQL Server,两组数据操作类,9/10/2024,15,ASP.NET 数据库应用程序开发,虽然这两组数据操作类针对的数据源不一样,但是,它们的架构都是一样的。例如对于,OleDbConnection,和,SqlConnection,,虽然一个是针对,OLE DB,数据源,而另一,个是针对,SQL Server,数据源,但是这它们都拥有一样的,属性、方法及事件,所以使用起来并不会造成困扰。只,要针对所要建立的数据源种类来选择,OLE DB,数据操作对,象或是,SQL,数据操作对象就可以了。,9/10/2024,16,ASP.NET 数据库应用程序开发,4.2.2,相关命名空间的引用,1,System.Data,命名空间,在程序中,要使用,ADO.NET,对象模型中的类时,必须,首先引用,System.Data,这个命名空间。因为,System.Data,这个命名空间中包括大部分组成,ADO.NET,架构的基础对象,类别,例如,DataSet,对象、,DataTable,对象、,DataColumn,对象、,DataRelation,对象等,所以要使用,ADO.NET,,在程,序中就一定引用,System.Data,这个命名空间。,9/10/2024,17,ASP.NET 数据库应用程序开发,2,System.Data.OleDb,命名空间,当要使用,OLE DB,数据提供者来存取数据时,必须引用,System.Data.OleDb,这个命名空间。,System.Data.OleDb,这个命名空间定义了,OLE DB,数据操作组件的对象类别,,例如,OleDbConnection,类、,OleDbCommand,类、,OleDbDataAdapter,类及,OleDbDataReader,类。,9/10/2024,18,ASP.NET 数据库应用程序开发,3,System.Data.SqlClient,命名空间,当要使用,SQL Server,数据提供者存取数据时,必须引,用,System.Data.SqlClient,这个命名空间。,System.Data.SqlClient,这个命名空间定义了,SQL,数,据操作组件的对象类别,例如,SqlConnection,类、,SqlCommand,类、,SqlDataAdapter,类及,SqlDataReader,类。,表,4.5,简要列举了,.Net,框架中与,ADO.NET,相关的几个命,名空间。,9/10/2024,19,ASP.NET 数据库应用程序开发,命名空间,说明,System.Data,包含了组成,ADO.NET,体系结构的一些基本类,System.Data.OleDb,包含了运用,OleDb,类型的数据提供者对象的类,System.Data.SqlClient,包含了运用,SQL Server,类型的数据提供者对象的类,System.Data.Odbc,是用于,ODBC,的,.NET Framework,数据提供者,System.Data.OracleClient,是用于,Oracle,的,.NET Framework,数据提供者,System.Data.SqlTypes,包含了代表,SQL Server,中的数据类型的类,System.Data.Common,包含了被所有的数据提供者对象所共享的类,System.Xml,包含一系列用来处理,XML,文档和文档片段的类,表,4.5 ADO.NET,相关的命名空间,9/10/2024,20,ASP.NET 数据库应用程序开发,4.2.3 Connection,对象及使用,1 Connection,对象的常用方法,(,1,),Open(),:利用,ConnectionString,所指定的属性设置,打开一个数据库连接。,(,2,),Close(),:关闭与数据库的连接。,(,3,),Clone(),:克隆一个连接。,(,4,),CreateCommand,(),:,创建并返回一个与,SqlConnection,相关的,SqlCommand,对象。,9/10/2024,21,ASP.NET 数据库应用程序开发,2 Connection,对象的常用属性,(,1,),ConnectionString,:获取或者设置用于打开数据库 的连接字符串。,(,2,),ConnectionTimeout,:在试图建立连接的过程中,获取在终止操作并产生错误之前等待的时间,也就是超时时间。,(,3,),DataBase,:取得或设置在数据库服务器上要打开的数据库名。,(,4,),DataSource,:取得或设置,DSN,。,(,5,),Password,:取得或设置密码。,(,6,),UserID,:取得或设置登录名。,(,7,),State,:取得目前连接的状态。,9/10/2024,22,ASP.NET 数据库应用程序开发,3 Connection,对象的构造函数与对象的创建,Connection,对象的创建是由其对应的构造函数构造,完成的,但是,不同的数据提供者用不同的类及其构造,函数完成,Connection,对象的创建,在,SQL Server,数据提,供者中用类,SqlConnection,的构造函数创建,Connection,对,象,而在,OLE DB,数据提供者中用类,OleDbConnection,的构,造函数创建,Connection,对象。,在表,4.6,中分别列出,SQL Server,数据提供者中类,SqlConnection,的两个构造函数的原型及其功能。,9/10/2024,23,ASP.NET 数据库应用程序开发,构造函数原型,功能,SqlConnection,(),创建一个,SqlConnection,对象,并将该对象的,ConnectionString,、,Database,、,DataSource,属性的值,都初始化为空字符串,,ConnectionTimeout,属性的,值初始化为,15,秒,SqlConnection(string,connectionString,);,利用参数,connectionString,所指定的连接字符串创,建一个,SqlConnection,对象,并将该对象的,ConnectionString,属性的值初始化为参数,connectionString,所表示的连接字符串,其它参数,的初始值同前,表,4.6,SqlConnection,类的两个构造函数及对应的功能,9/10/2024,24,ASP.NET 数据库应用程序开发,在表,4.7,中分别列出类,OleDbConnection,的两个构造函数,的原型及其功能。,构造函数原型,功能,OleDbConnection,(),创建一个,OleDbConnection,对象,并将该对象的,ConnectionString,、,Database,、,DataSource,属性的值都初始化为空字符串,,ConnectionTimeout,属性的值初始化为,15,秒,OleDbConnection(string,connectionString,),利用参数,connectionString,所指定的连接字符串创建一个,OleDbConnection,对象,并将该对象的,ConnectionString,属性的值初始化为参数,connectionString,所表示的连接字符串,其它参数的初始值同前,表,4.7,OleDbConnection,类的两个构造函数及对应的功能,9/10/2024,25,ASP.NET 数据库应用程序开发,表,4.8,中,以,SQL Server,数据提供者为例来说明创建,Connection,对象的方法。,第,种,首先,利用,SqlConnection,类的构造函数,SqlConnection,(),创建一个未初,始化的,SqlConnection,对象,再用一个连接字符串初始化该对象:,SqlConnection,conn,=new,SqlConnection,();,/,需要注意的是在使用,conn,之前必须再设置,ConnectionString,属性的值,conn.,ConnectionString,=,server=,localhost;database,=,pubs;uid,=,sa;pwd,=;,第,种,利用,SqlConnection,类的构造函数,SqlConnection(string,connectionString,),创建一个,SqlConnection,对象,并为该构造函数的参,数指定一个连接字符串。,SqlConnection,conn,=new,SqlConnection,(,server=,localhost;database,=,pubs;uid,=,sa;pwd,=;,);,表,4.8,创建,Connection,对象的两种方法,9/10/2024,26,ASP.NET 数据库应用程序开发,4,连接字符串,连接字符串是由“,;”,分隔的若干个参数及其对应的值所,组成,参数名和对应的值间用“,=”,连接。下面通过相应的实例来说,明如何指定连接字符串的内容。,(,1,)连接到,SQL Server,数据库的连接字符串,using,System.Data,;,using,System.Data.SqlClient,;,SqlConnection,conn,=new,SqlConnection,();,conn.ConnectionString,=,Server=(,local);Database,=,Northwind;Uid,=,sa;Pwd,=;,Connection Timeout=5;,9/10/2024,27,ASP.NET 数据库应用程序开发,首先,连接,SQL Server,数据库引用的命名空间是,System.Data.SqlClient,,建立连接对象用的构造函数为,SqlConnection,(),。,然后对已建立的连接对象指定其,ConnectionString,属,性的值,即指定连接字符串。在该连接字符串中,需要指定若干个,属性的值,现分别说明如下:,Provider,参数:,标识所要连接数据源的种类。读者可能注意到,在上面所举的,例子中,连接字串中没有指定,Provider,参数,这是因为在本例中使,用的是,SQL Server Data Provider,,如果通过,OleDB,Data Provider,连接数据库,就必须指定正确的,Provider,参数,表,4.9,中指明了要连,接的数据源及,Provider,参数值的对应关系。,9/10/2024,28,ASP.NET 数据库应用程序开发,Provider,参数值,连接的数据源,SQLOLEDB,Microsoft OLEDB Provider for SQL Server,MSDASQL,Microsoft OLEDB Provider for ODBC,MSDAORA,Microsoft OLEDB Provider for Oracle,Microsoft.Jet.OLEDB.4.0,Microsoft Jet,引擎,4.0,,,OLEDB Provider for Access,MSIDXS,Microsoft Index Server,ADSDSOObject,Microsoft Active Directory Services,表,4.9 Provider,参数支持的数据源,9/10/2024,29,ASP.NET 数据库应用程序开发,Server,参数,(,也可以写成,Data Source,、,Address,、,Addr,),:,指定数据库服务器中所要连接的,SQL Server,实例和,它所在的机器。,Server=(local),,指明执行,ADO.NET,代码,的主机和数据库的主机是同一台机器,即使用的是本地,数据库,,并隐式地标识了默认的,SQL Server,实例。,Server=(local),也可以写成,erver,=,localhost,。如果,使用的是本地,数据库,且定义了实例名,则可以写为,Server=(local),实例名;如果是远程服务器,则将,Server,参数值替换为远程服务器的名称或,IP,地址,如,Server=Huang,或,Server=202.204.125.19,。,9/10/2024,30,ASP.NET 数据库应用程序开发,Database,参数,(,也可以写成,Initial Catalog),:,指定数据库服务器中所要连接的数据库名称。如,,Database=,Northwind,可以写成,Initial Catalog=,Northwind,,指明使用的数据源为,Northwind,数据库。,Uid,参数,(,也可以写成,User ID),:,指定登录数据源的使用者帐号。,Uid,=,sa,可以写成,User,ID=,sa,,即将连接数据库的验证用户名指定为,sa,。,Pwd,参数,(,也可以写成,Password),:,指定登录数据源的使用者密码。“,Pwd,=”,标识数据,库连接的验证密码为空,其等价于“,Password=”,。出于,安全考虑,建议密码不要为空。,9/10/2024,31,ASP.NET 数据库应用程序开发,Connect Timeout,参数:,确定打开数据库将要等待的最长时间,以秒为单,位,默认值为,15,秒。,Connect Timeout=5,表明数据库连接,超时时间为,5,秒。,另外,还有其他一些比较常用的连接字符串参数,,Integrated Security,(亦称为,Trusted_Connection,)决,定是否启用,SQL Server,集成安全验证,(,亦称可信任连,接,),,默认为,False,(等效于,No),,表明使用连接字符串中,的用户名和密码对用户进行验证。如果值为,True,(等效,于,SSPI,或,Yes,),表示,SQL Server,使用,Windows,验证模,式。,9/10/2024,32,ASP.NET 数据库应用程序开发,如果,SQL Server,设置为,Windows,验证模式,那么就不需要使用,Uid,和,Pwd,这样的方式来登录,而需要使用,Integrated,Security=SSPI,来进行登录。这样连接字符串可以修改为:,SqlConnection,conn,=new,SqlConnection,();,conn.ConnectionString,=Server=(,local);DataBase,=,Northwind;Integrated,Security=SSPI;,采用,SQL Server,集成安全是连接到,SQL Server,数据库更可靠的,方法,因为它不会在连接字符串中暴露用户名和密码。,Pooling,参数确定是否启用连接池,默认值为,True,。,Min Pool,Size,和,Max Pool Size,设定了连接池的大小,默认值分别为,0,和,100,。,若将最小池设置为大于,0,的某个值,会使连接池预先加载指定数目的,连接,并帮助负载较重的应用程序快速启动。,9/10/2024,33,ASP.NET 数据库应用程序开发,(,2,)连接到,Access 2000,数据库的连接字符串,连接,Access,数据库机制与连接,SQL Server,的机制没有什么太大的区,别,只是要使用,Ole DB,数据提供者中的,OleDbConnection,类来定义,Connection,对象,且需要对连接字符串中的不同参数指定不同的值即,可,如:,using,System.Data,;,using,System.Data.OleDb,;,OleDbConnection,conn,=new,OleDbConnection,(Provider=Microsoft.Jet.OleDB.4.0;DataSource=C:,Pubs.mdb,;);,连接,Access,数据库需要引用命名空间,System.Data.OleDb,,而不是,引用连接,SQL Server,的命名空间,System.Data.SqlClient,;另外,应使,用,OleDbConnection,类定义连接对象,而不能使用,SqlConnection,类定,义。,9/10/2024,34,ASP.NET 数据库应用程序开发,Data Source=C:,pubs.mdb,指明数据源的位置,连接字符串中使,用的“,”,符号表示文字字符串常量,防止将后面的路径字符串中的,“,”,解析为转义字符。如果要连接的数据库文件和当前应用程序文,件在同一个目录下,还可以使用如下的方法连接,:,OleDbConnection,conn,=new,OleDbConnection,(Provider=Microsoft.Jet.OleDB.4.0;Data Source=+,MapPath(Pubs.mdb,)+;);,如果想使用,OLE DB,数据提供者建立与,SQL Server,数据库的连,接,则应使用,OleDbConnection,类定义,Connction,对象,并在连接字,符串中,将,Provider,参数的值设定为“,sqloledb,”,,如下代码所,示:,OleDbConnection,conn,=new,OleDbConnection,(Provider=,sqloledb;Server,=(,local);Database,=,Northwind;Uid,=,sa;Pwd,=;);,9/10/2024,35,ASP.NET 数据库应用程序开发,需要注意的三点:,连接字符串中各参数的出现次序不受限制。,连接字符串中参数的大小写不受限制。,每个参数的后面用分号“,;”,分隔,最后一个参数的末,尾可以用也可以不用“,;”,,建议使用。,在连接字符串被赋值时,,SqlConnection,或,OleDbConnection,验证它的格式,如果连接字符串的参数,错误,会引发异常,如将“,Server”,写成“,Ser”,。而连,接字符串的参数值直到打开连接时才会被验证,所以如,果服务器名、数据库名等参数值无效,在连接字符串赋,值时就不会引发异常。,9/10/2024,36,ASP.NET 数据库应用程序开发,5 Connection,对象的打开和关闭,创建一个,Connection,对象并指定一个连接字符串并没,有打开一个指向数据库的物理连接,需要调用对象的,Open,方法来打开连接。用,Open,方法打开的连接。,而用,Close,方法来关闭,Connection,对象,不关闭打开,的连接会影响系统性能和对应用程序的操作,所以最好,关闭连接。,SqlConnection,和,OleDbConnection,类都提供,Open,和,Close,方法。,9/10/2024,37,ASP.NET 数据库应用程序开发,SqlConnection,conn,=new,SqlConnection,(Server=(,local);Database,=,Northwind;Uid,=,sa;Pwd,=;);,try,conn.Open,(); /,打开连接,catch(SqlException,e) /,捕捉异常,,Response.Write(e.Message.ToString,(); /,输出错误,finally,conn.Close,(); /,关闭连接,9/10/2024,38,ASP.NET 数据库应用程序开发,以上代码使用的是,SQL Server,数据提供者,若使用,OLE DB,数据提供者,的等价代码如下,需要注意的是异常类型为,OleDbException,而不是,SqlException,。,OleDbConnection,conn,=new,OleConnection(Server,=(,local);Database,=,Northwind;Uid,=,sa;Pwd,=;);,try,conn.Open,(); /,打开连接,catch(OleDbException,e) /,捕捉异常,,Response.Write(e.Message.ToString,(); /,输出错误信息,finally,conn.Close,(); /,关闭连接,9/10/2024,39,ASP.NET 数据库应用程序开发,打开和关闭数据源的代码位于,trycatchfinally,块中,因此可以捕获任何由于试图连接数据库而导致的,异常。我们只需要打开连接再关闭它即可,如果在处理,过程中抛出异常,,catch,子句就会捕获它。在,finally,块,内调用,Close,方法,无论是否出现异常,都会关闭连接。,所以,这是一种很好的程序结构。,9/10/2024,40,ASP.NET 数据库应用程序开发,4.2.4 Command,对象及使用,Command,对象提供对数据源执行,SQL,命令的接口,可,以用来对数据库发出一些指令。利用,Command,对象可调用,SQL,命令来返回数据、修改数据、运行存储过程,以及发,送或者检索参数信息。这个对象是架构在,Connection,对,象上,即,Command,对象是通过连接到数据源的,Connection,对象来下达命令的。所以,Connection,连接到哪个数据,库,,Command,对象的命令就下达到哪里。,9/10/2024,41,ASP.NET 数据库应用程序开发,1 Command,对象的常用属性,当我们将,Command,对象建立好之后,就可以设定,Command,对象的属性了。,Command,对象的常用属性如下:,(,1,),Connection,:该属性是设定,Command,对象对数据源的操作要通过哪个,Connection,对象,例如我们想通过,cn,这个,Connection,对象对数据源进行数据操作,则可以将其,Connection,属性的值设置为,cn,,即:,cmd.Connection,=,cn,。,(,2,),ConnectionString,:获取或设置用于打开,SQL Server,数据库的字符串。,9/10/2024,42,ASP.NET 数据库应用程序开发,(,3,),CommandType,:获取或设置,CommandText,属性中的内容是,SQL,语句、数据表名称还是存储过程的名称。也就是说,,CommandType,属性的取值不同,决定了,CommandText,属性的值中应书写的内容的不同。,CommandType,可以设置为以下三个值之一:,“,CommandType.Text,”,(默认值):,当把,CommandType,属性的值设为“,CommandType.Text,”,或不指定任何值时,,CommandText,属性的值为一个,SQL,字符串(既可以是一个简单的查询,又可以是插入、删除、更新数据的语句)。,“,TableDirect,”,:,当把,CommandType,属性的值设为“,TableDirect,”,时,应该把,CommandText,属性的值设为要访问的表的名称。,“,StoredProcedure,”,:,当把,CommandType,属性的值设为“,StoredProcedure,”,时,应该把,CommandText,属性的值设为存储过程的名称。,(,4,),CommandText,:获取或设置在数据源中执行的,SQL,语句或存储过程。,(,5,),CommandTimeout,:获取或设置超时时间。,9/10/2024,43,ASP.NET 数据库应用程序开发,2 Command,对象的常用方法,(,1,),ExecuteNonQuery,(),:可以执行例如,Transact_SQL,的,Insert,、,Delete,、,Update,命令以及,Set,命令,并返回受命令影响的行数。,(,2,),ExecuteReader,(),:执行返回行的命令。,(,3,),ExecuteScalar,(),:从数据库中检索单个值。,(,4,),ExecuteXmlReader,(),:把,CommandText,发送给连接,构建一个,XmlReader,对象。,(,5,),Cancel(),:取消,Command,命令的执行。,9/10/2024,44,ASP.NET 数据库应用程序开发,3 Command,对象的构造函数与,Command,对象的创建,SqlCommand,类的构造函数,OleDbCommand,类的构造函数,SqlCommand,(),OleDbCommand,(),SqlCommand(string,cmdText,),OleDbCommand(string,cmdText,),SqlCommand(string,cmdText,SqlConnection,connection),OleDbCommand(string,cmdText,OleDbConnection,connection),SqlCommand(string,cmdText,SqlConnection,connection,SqlTransaction,transaction),OleDbCommand(string,cmdText,OleDbConnection,connection,OleDbTransaction,transaction),表,4.10,SqlCommand,类与,OleDbCommand,类的,4,种构造函数,9/10/2024,45,ASP.NET 数据库应用程序开发,说明:,(,1,)参数,cmdText,表示以字符串表示的,SQL,语句;参数,connection,表示已创建的连接到数据源(,SQL Server,数据源或,OLE DB,数据源)的,Connection,对象;参数,transaction,表示已创建的事务对象。,(,2,)第,1,种构造函数创建一个,Command,对象,该对象的,CommandText,属性的值初始化为空字符串、,CommandTimeout,属性的值初始化为,30,秒、,CommandType,属性的值初始化为“,CommandType.Text,”,、,Connection,属性的值初始化为空。,第,2,种构造函数创建,Command,对象,并将该对象的,CommandText,属性的值初始化为参数,cmdText,的值。,9/10/2024,46,ASP.NET 数据库应用程序开发,第,3,种构造函数创建,Command,对象,并将该对象的,CommandText,属性的值初始化为参数,cmdText,的值、,Connection,属性的值初始化为参数,connection,的值。,第,4,种构造函数创建,Command,对象,并将该对象的,CommandText,属性的值初始化为参数,cmdText,的值、,Connection,属性的值初始化为参数,connection,的值、,Transaction,属性的值初始化为参数,transaction,的值。,9/10/2024,47,ASP.NET 数据库应用程序开发,SqlConnection,conn,=new,SqlConnection,(Server=(,local);Database,=,Northwind;Uid,=,sa;Pwd,=;);,try,conn.Open,(); /,打开数据库连接,SqlCommand,cmd,=new,SqlCommand,(); /,创建,SqlCommand,对象,cmd.CommandType,=,CommandType.Text,; /,设置命令类型为,SQL,cmd.CommandText,=delete from Categories; /,设置命令,cmd.Connection,=,conn,; /,设置连接属性,cmd.ExecuteNonQuery,(); /,执行命令,catch(SqlException,e) /,捕捉异常,,Response.Write(e.Message.ToString,(); /,输出错误信息,finally,conn.Close,(); /,关闭连接,9/10/2024,48,ASP.NET 数据库应用程序开发,当然,也可以在创建,Command,对象的同时,初始化它,的,CommandText,和,Connection,属性,而不用分别给属性赋,值,如下面的代码段所示。另外,还可以设置,Command,对,象的,CommandTimeout,属性来指定命令执行的超时时间,,默认,30,秒,超时时将引发,SqlException,异常(防止超时,的办法是将时间设置为,0,秒)。,9/10/2024,49,ASP.NET 数据库应用程序开发,SqlConnection,conn,=new,SqlConnection,(Server=(,local);Database,=,Northwind;Uid,=,sa;Pwd,=;);,try,conn.Open,(); /,打开数据库连接,SqlCommand,cmd,=new,SqlCommand(select,count(*) from Categories ,conn,);,cmd.CommandTimeout,=10;/,设置超时时间为,10,秒,cmd.ExecuteNonQuery,(); /,执行命令,catch(SqlException,e) /,捕捉异常,Response.Write(e.Message.ToString,();,finally,conn.Close,(); /,关闭连接,9/10/2024,50,ASP.NET 数据库应用程序开发,4.2.4.4,ExecuteNonQuery,方法,Command,对象的,ExecuteNonQuery,方法用来执行,Insert,、,Update,、,Delete,和其他没有返回值的,SQL,命令。,当使用,Insert,、,Update,、,Delete,等,SQL,命令时,,ExecuteNonQuery,方法返回被命令影响的行数,对其他,SQL,命令执行的操作,,ExecuteNonQuery,方法返回,-1,。当,Update,和,Delete,命令执行的目标记录不存在时,,ExecuteNonQuery,方法只是返回,0,,而不构成错误。,9/10/2024,51,ASP.NET 数据库应用程序开发,5,ExecuteScalar,方法,Command,对象的,ExecuteScalar,方法执行一个,SQL,命令,并返回结果集的第一行的第一列,如果结果集多于一行,一列,它将忽略其余部分,例如查询学生姓名是“张,三”的结果集中有多个人重名,这时将只返回第一人的,名字。它经常用来执行,SQL,的,Count,、,Avg,、,Sum,等函数,,因为这些函数都是返回单行单列的结果集。下面的代码,段返回,Categories,表的记录数。,9/10/2024,52,ASP.NET 数据库应用程序开发,SqlConnection,conn,=new,SqlConnection,(Server=(,local);Database,=,Northwind;Uid,=,sa;Pwd,=;);,try,conn.Open,(); /,打开数据库连接,SqlCommand,cmd,=new,SqlCommand(select,count(*) from Categories ,conn,);,Response.Write,(,cmd.ExecuteScalar().ToString,();,catch(SqlException,e) /,捕捉异常,Response.Write(e.Message.ToString,();,finally,conn.Close,(); /,关闭连接,9/10/2024,53,ASP.NET 数据库应用程序开发,6,ExecuteReader,方法,Command,对象的,ExecuteReader,方法通过,DataReader,对象返回与,SQL,查询匹配的行。只要创建了一个,Connection,对象,并为,Command,对象指定一个,SQL,查询,,就可以调用,Command,对象的,ExecuteReader,方法,从数据,源中检索数据。,假设,cmd,是已经创建好的,Command,对象,下面这段代码,利用,cmd,对象的,ExecuteReader,方法创建一个,DataReader,对象:,SqlDataReader,dr,;,dr,=,cmd.ExecuteReader,();,9/10/2024,54,ASP.NET 数据库应用程序开发,然后利用,DataReader,对象的,Read,方法,从查询结果中获,取一行。,While (,dr.Read,(),Response.Write(dr.GetString1);,dr.Close,();,Command,对象的,ExecuteReader,方法两种原型,二者都可,以返回一个,DataReader,对象:,(,1,),ExecuteReader,(),(,2,),ExecuteReader(CommandBehavior,behavior),9/10/2024,55,ASP.NET 数据库应用程序开发,其中,参数,behavior,的取值常见有以下几种情况:,(,1,),CommandBehavior.SingleRow,:表示,ExecuteReader,只获得结果集的第一行数据。因此,如果结果集包含多个行,使用,ExecuteReader,(,CommandBehavior.SingleRow,)的效果比较好,因为它只返回单个结果集中的第一行。,(,2,),CommandBehavior.SingleResult,:表示在潜在会返回多个结果集的查询中,只需要第一个结果集。,9/10/2024,56,ASP.NET 数据库应用程序开发,(,3,),CommandBehavior.SequentialAccess,:默认情况下,,DataReader,每次读取数据时都要把整行数据加载到内存中,允许在当前行内随机访问列。如果不需要这种随机访问,为了提高性能,就把,CommandBehavior.SequentialAccess,传递给,ExecuteReader,方法调用。这将,DataReader,的默认行为更改为仅在请求时将数据加载到内存。注意,,CommandBehavior.SequentialAccess,要求顺序访问返回的列。也就是说,一旦读过返回的列,就不能再读它的值了。,9/10/2024,57,ASP.NET 数据库应用程序开发,4.2.5,DataReader,对象及使用,DataReader,对象提供了基于连接的数据存储访问方,式,以只向前移动的、只读的格式访问数据源中的数,据。很多时候,用户只是希望简单地浏览数据,而并不,需要以随机的方式(即前后移动
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 营销创新


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!