风流不在谈锋胜, 袖手无言味最长。**_** 莫言大道人难得,自是功夫不到头。
置顶随笔 #
posted @ 2008-04-09 18:07 拼命郎 阅读(123) | 评论 (0) | 编辑
2008年7月22日 #
在用view控件实现一系列业务操作的分步操作时发现了一个问题,在某个View中实现了如下功能:
A控件放在其中一个View中,用控制A控件的显示和隐藏(Visible)的方法表示业务中存在A和不存在A的情况,并用来作为一个属性的字段。
切换View前读取此属性无任何问题,可当切换View后读取此属性一直为不存在,也就是A控件的Visible属性一直为False。跟踪代码也确实如此。
不知道这种情况是否.net的一个bug,可能跟asp.net的View与MultiView的实现方式有关吧,本人正在查找资料,但网上讲应用的多原理的少,无奈正准备去慢慢看View的源代码。
希望有兴趣的xdjm共同探讨。
下面我先抛砖引玉,说一下我的理解。
首先从Visible这个属性说起,我发现官方提供的web控件都继承自System.Web.UI.Control这个类,同时,Control 类的Visible这个属性是个virtual属性的方法。本人猜测当隐藏和现实一个View容器,可能通过的是改变其内所有控件Visible属性来实现的,毕竟这样对于多个同根的派生类来说实现起来很简单。
posted @ 2008-07-22 21:09 拼命郎 阅读(188) | 评论 (0) | 编辑
2008年4月9日 #
2008年2月27日 #
posted @ 2008-02-27 21:59 拼命郎 阅读(45) | 评论 (0) | 编辑
2006年12月22日 #
最近项目中数据库操作非常频繁复杂,同事讨论是不是更改一下数据库操作类的写法,原来数据库操作类是每个方法对应一个存储过程,把复杂的逻辑判断都放到数据库中了。但是同事提出异议:存储过程非常不灵活,不能做到各种数据库通用,不利于以后项目的变化;存储过程不能做到更新操作的灵活设置更新字段的选择。在我的思想里虽然觉得他说的有些道理,但是一直不能认同,存储过程执行的高效和管理上的方便相信大家都有体会,我们也都认可,但是我实在不能理解把sql语句写到程序里比写成存储过程优越到哪里。看来真得好好思考几天。
posted @ 2006-12-22 22:30 拼命郎 阅读(154) | 评论 (0) | 编辑
2006年9月26日 #
posted @ 2006-09-26 12:13 拼命郎 阅读(139) | 评论 (0) | 编辑
今天在sqlserver 中 一个事务中调用了一个本身带有事务的存储过程,出现了下面错误 Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 1, current count = 0. 经过检查发现问题主要是因为事务的嵌套引起的。被嵌套的事务里面如果出现错误处理不当是导致这个问题的主要原因。一般情况下都是用RollBack Transaction,但是在嵌套的事务中这样往往会出现错误。 在SqlServer里,嵌套事务的层次是由@@TranCount全局变量反映出来的。每一次Begin Transaction都会引起@@TranCount加1。而每一次Commit Transaction都会使@@TranCount减1,而RollBack Transaction会回滚所有的嵌套事务包括已经提交的事务和未提交的事务,而使@@TranCount置0。举个例子:
Begin Transaction -- @@TranCount = 1 BeginTransaction -- @@TranCount = 2 BeginTransaction -- @@TranCount = 3 Commit Transaction -- @@TranCount = 2 Commit Transaction -- @@TranCount = 1Commit Transaction -- @@TranCount = 0如果出现错误ROLLBACK TRANSACTION 则:Begin Transaction -- @@TranCount = 1 BeginTransaction -- @@TranCount = 2 BeginTransaction -- @@TranCount = 3 ROLLBACK TRANSACTION -- @@TranCount = 0 Commit Transaction -- @@TranCount = 0---出现错误Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 1, current count = 0. 如果被嵌套的事务中发生错误,最简单的方法应该是无论如何都先将它提交,同时返回错误码(一个正常情况不可能出现的代码 如 -1)让上一层事务来处理这个错误,从而使@@TranCount 减1。 这样外层事务在回滚或者提交的时候能够保证外层事务在开始的时候和结束的时候保持一致。由于里层事务返回了错误码,因此外层事务(最外层)可以回滚事务,这样里面已经提交的事务也可以被回滚而不会出现错误。
在项目中应该会常常出现这样的情况,一个存储过程里面用了事务,但是不能保证它会被别的带有事务的存储过程调用,如果单独调用的话,出现错误可以直接回滚,但是如果是被别的带事务的存储过程调用的话,RollBack 就会出错了。因此需要一种机制来区分,建立一个临时的变量来区分是否嵌套,和嵌套的层数,如下:declare @tempTranCount intset @tempTranCount = 0Begin Transactionset @tempTranCount = @tempTranCount +1…………--事务内要执行的代码…………IF @@ERROR<>0goto Error Commit TransactionCommit Transaction--下面返回要返回的值0只是个例子Return 0
Error: IF(@@TranCount = @tempTranCount) RollBack Transaction Else Commit Transaction Return @Error
posted @ 2006-09-26 11:47 拼命郎 阅读(1216) | 评论 (4) | 编辑
2006年8月10日 #
posted @ 2006-08-10 10:32 拼命郎 阅读(88) | 评论 (0) | 编辑
2006年5月1日 #
posted @ 2006-05-01 13:30 拼命郎 阅读(47) | 评论 (0) | 编辑
2006年4月21日 #
posted @ 2006-04-21 11:40 拼命郎 阅读(131) | 评论 (1) | 编辑
2006年4月19日 #
posted @ 2006-04-19 15:59 拼命郎 阅读(67) | 评论 (0) | 编辑
Powered by: 博客园 Copyright © 拼命郎