以文本方式查看主题

-  曙海教育集团论坛  (http://www.sun4.cn/bbs/index.asp)
--  SQL Server数据库  (http://www.sun4.cn/bbs/list.asp?boardid=67)
----  数据库事务控制的实现位置:服务器VS客户端,请大家讨论  (http://www.sun4.cn/bbs/dispbbs.asp?boardid=67&id=2523)

--  作者:wangxinxin
--  发布时间:2010-12-13 13:13:08
--  数据库事务控制的实现位置:服务器VS客户端,请大家讨论
这段时间开始有幸学习了ado.net访问数据库的一些内容。我开始思考一个有关数据库事务控制的问题。ado.net中的SqlTransaction 类可以为数据库访问提供事务的支持。你可以打开一个数据库联接,然后在这个联接上启动一个事务(启动事务相当于T-SQL的begin transaction语句),在这个启动了事务的数据库联接上你可以添加并执行若干数据库访问命令,然后根据命令的执行情况决定提交或者回滚事务。这使得通过ado.net访问数据库的应用程序可以实现数据库的事务控制。

另一方面,T-SQL同样提供了数据库的事务控制,这是众所周知的。通常,数据库设计人员常说,把数据的访问控制放在离数据最近的地方才是最安全的,比如我们设计数据库时,在数据表上实现的唯一约束、check约束、触发器等等都是基于这种设计思想的。类似ado.net这种的数据库访问技术也提供了对数据库事务的支持,但是按照“把数据的访问控制放在离数据最近的地方才是最安全的”的思想,我们有更好的选择方式。比如,我们可以设计数据库存储过程,由存储过程提供事务控制,并只允许数据库客户端访问数据库时去执行存储过程。这样一来,似乎就没有使用ado.net、ado、oledb等等这些数据库访问技术提供的支持事务的API接口的必要了。但是,我想未必是这样的,既然有这些API接口存在,肯定是有它的必要性的。

我现在想让大家讨论一下,你们在实际应用中使用过某种数据库访问技术的事务功能吗?这种应用是在什么请况下比较有价值呢?