链接是一种很重要的资源,可以让我们把不相关的东西链接起来,在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用于执行选择记录的查询命令或存储过程。它返回一个或多个结果集。
- cmd.Connection.Open();
- SqlDataReader dr = cmd.ExecuteReader();
- // 处理结果集
- cmd.Connection.Close();
你可以通过SqlDataReader对象访问选择的记录,使用Read方法在记录间循环。使用NextResults方法移动到下一结果集。ExecuteNonQuery用于执行命令或存储过程,它影响特定表的状态。这只意味着一个查询命令。通常使用此方法执行INSERT, UPDATE, DELETE, CREATE, SET语句。ExecuteNonQuery只返回命令所影响到的行数,如果得不到信息则返回-1.它并不能使你访问语句或存储过程生成的结果集。实际上,无法阻止你用此方法执行一条查询命令,但在这种情况下,你既得不到结果集也得不到被影响的行数。
- cmd.Connection.Open();
- nRecsAffected = cmd.ExecuteNonQuery();
- cmd.Connection.Close();
- //此处检查影响到的记录
通过SqlCommand对象的RecordsAffected属性可以得到影响到的行数。如果发生错误或如果执行的昌查询命令,此属性值为-1.ExecuteScalar期望执行查询命令,或更可能是一个存储过程,它返回数据。然而,此方法与ExecuteReader方法不同,它只将得到的结果集中的第一行第一列的值作为标量值返回。
- cmd.Connection.Open();
- Object o = cmd.ExecuteScalar();
- cmd.Connection.Close();
- // work on the scalar here
此方法将值作为一个封装对象返回。然后由你来解包或将此值造型为正确的期望类。如果需要对数据执行具有统计或集合性质的操作,ExecuteScalar方法将特别有用。在这些或相似的情况下,你可能只希望返回给调用者一个值。由于它的使用场合,你或多或少的对存储过程而不是单个SQL语句使用此方法。ExecuteXmlReader方法在SELECT命令执行后,构建并返回一个XmlReader对象,它利用了存在于SQL Server 2000中的XML特性。