全面讲解ADO.NET链接对象重要性

开发 后端
文章介绍了ADO.NET链接对象SqlCommand类提供了用于执行命令的四个方法:ExecuteReader, ExecuteNonQuery, ExecuteScalar。

链接是一种很重要的资源,可以让我们把不相关的东西链接起来,在ADO .NET提供了一种 ADO.NET链接对象。不论何时客户端需要一个链接,返回的是链接池中的对象。一旦链接关闭,对象不是留给碎片收集器,而是释放到池中,供其它调用者使用。  链接池不是由ADO .NET直接管理。SQL Server链接依靠Windows? 2000服务组件地pooling服务。每个链接池通过确切的匹配法则与不同的链接字符串相关。一旦创建,SQL Server链接池至到活动过程终止,它才会终结。

#T#相反,OLE DB链接被很小心的集中在OLE DB提供者会话对象的内部实现中。会话集中和自动收集是通过OLE DB服务完成,并通过注册设置在每一个提供者基础上被激活。因此,自动链接池并不会发生在所有OLE DB 提供者上,所有设备上。关于ADO.NET链接对象,最后要指出的是,链接类是不可继承的。你不能从SqlConnection 或 OleDbConnection中创建一个新类。这样做是出于代码安全方面的考虑。然而,你可以创建你自己的类,在类中包含一个或多个ADO.NET链接对象。使用直接命令在向数据提供者发送命令前,要确保链接已经打开。默认链接是关闭的。然后,执行命令,只要有可能就关闭链接以确保其他客户能得到重要资源。

SqlCommand类提供了用于执行命令的四个方法。它们是:ExecuteReader, ExecuteNonQuery, ExecuteScalar,及最新的但不是最小的,ExecuteXmlReader.从本质上讲,这些方法在期望的输入上不同,返回的结果不同而已。通常,在操作完成后,需要确定使用的方法而不是继续向前。顺便指出,OleDbCommand 对象不支持ExecuteXmlReader.ExecuteReader用于执行选择记录的查询命令或存储过程。它返回一个或多个结果集。

  1. cmd.Connection.Open();  
  2. SqlDataReader dr = cmd.ExecuteReader();  
  3. // 处理结果集  
  4. cmd.Connection.Close(); 

你可以通过SqlDataReader对象访问选择的记录,使用Read方法在记录间循环。使用NextResults方法移动到下一结果集。ExecuteNonQuery用于执行命令或存储过程,它影响特定表的状态。这只意味着一个查询命令。通常使用此方法执行INSERT, UPDATE, DELETE, CREATE, SET语句。ExecuteNonQuery只返回命令所影响到的行数,如果得不到信息则返回-1.它并不能使你访问语句或存储过程生成的结果集。实际上,无法阻止你用此方法执行一条查询命令,但在这种情况下,你既得不到结果集也得不到被影响的行数。

  1. cmd.Connection.Open();  
  2. nRecsAffected = cmd.ExecuteNonQuery();  
  3. cmd.Connection.Close();  
  4. //此处检查影响到的记录 

通过SqlCommand对象的RecordsAffected属性可以得到影响到的行数。如果发生错误或如果执行的昌查询命令,此属性值为-1.ExecuteScalar期望执行查询命令,或更可能是一个存储过程,它返回数据。然而,此方法与ExecuteReader方法不同,它只将得到的结果集中的第一行第一列的值作为标量值返回。

  1. cmd.Connection.Open();  
  2. Object o = cmd.ExecuteScalar();  
  3. cmd.Connection.Close();  
  4. // work on the scalar here 

此方法将值作为一个封装对象返回。然后由你来解包或将此值造型为正确的期望类。如果需要对数据执行具有统计或集合性质的操作,ExecuteScalar方法将特别有用。在这些或相似的情况下,你可能只希望返回给调用者一个值。由于它的使用场合,你或多或少的对存储过程而不是单个SQL语句使用此方法。ExecuteXmlReader方法在SELECT命令执行后,构建并返回一个XmlReader对象,它利用了存在于SQL Server 2000中的XML特性。

责任编辑:田树 来源: 博客
相关推荐

2009-12-25 10:17:27

2009-11-03 15:24:14

ADO.NET对象模型

2009-11-11 09:48:08

ADO.NET Com

2009-11-04 09:52:10

ADO.NET Sql

2009-11-12 16:14:28

ADO.NET自定义对

2009-11-12 09:44:41

ADO.NET对象

2009-11-12 14:37:26

ADO.NET结构

2009-12-24 09:34:47

调用ADO.NET

2009-10-29 13:34:01

ADO.NET对象

2009-11-04 08:38:30

ADO.NET库文件

2009-11-04 12:45:33

ADO.NET Dat

2009-11-04 13:20:28

ADO.NET Dat

2009-10-29 11:08:20

ADO.NET Dat

2009-10-29 10:10:10

ADO.NET数据集类

2009-11-04 11:30:35

ADO.NET Dat

2009-12-18 14:27:24

ADO.NET对象

2009-12-28 13:47:31

ADO.NET对象

2009-11-12 16:04:42

ADO.NET对象查询

2009-10-29 08:51:24

ADO.NET结构

2009-12-31 14:46:29

ADO.NET Ent
点赞
收藏

51CTO技术栈公众号