扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:Dino Esposito 来源:Microsoft 2007年11月5日
关键字:
在向数据提供者发送命令前,要确保链接已经打开。默认链接是关闭的。然后,执行命令,只要有可能就关闭链接以确保其他客户能得到重要资源。
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特性。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。