软件编程走火入魔之:数据库事务处理入门(适合初学者阅读)
2009-10-03 20:33 通用C#系统架构 阅读(5257) 评论(92) 编辑 收藏 举报前言:
培训机构是每年都花费几十万的广告费用在报纸上打广告,都是报社的重大客户,商场如战场,培训机构专门请了抢手记者写的文章,也是为了打垮竞争对手、排挤竞争对手,因为他们的学员都想退学费,跑我这里培训,那对培训机构又是几十万的损失,所以才会大动干戈、跟我干了一场文明的较量,来了个你死我活,我并不是骗了哪些学员,反而我培养了很多人才,他们大多都工作很好,干得也蛮不错的,甚至还有上万月薪的,真实生活里没人跟我像网上一样受骗上当的,倒是有几个感恩的人,真人都可以拉出来做证明,你跟我面都没见过,就觉得我骗人了,而且还很执着,我就有些好笑了,也不用脑袋想一想?
我现在是每年大概会带10来个新人,他们都工作开心也能学到些知识、天天都在跟我一起工作,也能赚到一些钱,也都是大学刚毕业的,他们也没觉得,我骗了他们,跟我关系也很好的呀,也给不少人提供了就业机会,也给不少人教了就业技能,让他们走入了软件行业的大门,谋生的本领。
也不想想,为什么正规的培训机构的学员,都想跑到我那里去培训?那也是我的实力证明,为什么偏偏要打压我?因为我有实力,能争抢他们的生源,也是实力的表现。
真的想上报纸的头版想上新浪网,也不太容易的事情,我有坚定的信念、从死亡的边缘爬出来的,遇到过很多挫折,这么点儿网上攻击,就像给我挠痒痒一样,算个P啊,要是100万的单子被人抢跑了,我会伤心,我会失落。
网上人身攻击,就像路边的人放了个臭屁一样,虽然味道不好,但是不可能影响我啥,走过去了,就不臭了,一个屁而已,也不影响我的生意,也不影响我的健康,我有钢铁般强硬的心,我没贪污我没受贿我很清白。
正文:
以下文章适合初学者阅读、文中写的未必正确、请作为学习提高参考。不是非得写个云里雾里的东西,才叫牛并不是人人都是专家、其实还有很多门外汉、业余爱好者,希望以下实实在在的文章,对那些初学者能有帮助,加快他们的入门学习之路。几年前,一万元的小项目做做都很开心,一年做好几个,几年后没几万几十万就懒得折腾了,胃口就大了,一年就折腾一件事情就可以了,无聊时就写写文章赚一赚吆喝,提高一下知名度。
有人问我,你为什么不写点儿别的,总写这些? 我回答:我天天干这个,不写这些我能写哪些呢?我就把我天天干的事情干明白了,产品化了,做得最好,才有可能去卖钱,别人才有可能会购买吧,我总是研究新的,我都学了十来年了,总要想想赚钱的事情吧? 难道非要我活到老学到老,天天学习?那哪里来的钱?卖产品,来钱是最快的,COPY一下就可以了,我就把我天天在做的东西,进行产品化,这个都不能产品,还能把其他的弄出产品来?
有时候我们会抱怨我们的客户业务知识不过关,其实我们IT软件行业里,有很多人自己的专业也不过关的,也没怎么进行系统的进行整理的,我们需要一些工作上的实实在在的积累、经验分享。
最早正规接触的接近数据库系统的是MySQL,当时在宁波的时候是用PHP写PostNuke架构的网站应用,只把数据库当成了存储数据的仓库而已,要什么数据查询一下,复杂的查询还需要用PHP语句进行处理,当时MySQL不支持复杂的查询,后来接触了公司的SQLServer2000,才真正知道了什么叫视图、主外键、索引、存储过程、游标、触发器等等,对数据库技术才算是真正的有些掌握了,我好像是大四学的数据库,当时老师也不会数据库,给我们瞎讲,唉现在我一切都明白了,但是这已经是3年后的事情了,可笑啊,对了Access是不支持事务的,它只是个文件类型的存储数据库的。
后来在又跑到杭州,学习了用PowerDesigner设计Oracle数据库,第一次感觉到,应该是先有设计规划、再按设计规划进行沟通交流、最后在按设计规划进行编码实现,虽然这时在技术上已经没有什么明显的提高了,但是心里总算踏实了,以前是按游击队现在总算是正规军了,呵呵,不容易啊,这时已经是毕业的第4年了。按盖房子来讲,盖茅草屋,随便盖盖就可以了,怎么盖都可以,但是要盖个大楼,不是随便盖盖就可以了,总得有设计吧,做软件业是同样的道理,就是建立数据库,也得有个设计规划才是对的,而且设计图纸更好交流些,传递些。
当年,我看了我们部门经理的一本厚厚的100多元的Oracle脚本编程大全,花了接近1个月多月时间从头到尾都学了一遍估计有1000多页吧,那本书上的例子也大体上都做了一遍,这时对Oracle的简单配置、用户、递归查询、序列、事务的了解有些加深了,其实从98年开始写程序到04年,已经是有5个年头了,单是对数据库事务、并发的了解还是停留在云里雾里,只能说是有点儿感觉,但是并不知道他真正的原理及用法,可能那时候也是能做出来一些,但是瞎猫碰死耗子的可能性比较大。
有一次,我在杭州的哪里逛街忘记了,正好旁边有个新华书店,我随便进去翻看几本书,不小心翻到一本Oracle的SQL教程,我爱不释手从头到尾都看了一下,然后按着书上的例子,全部做了一次实验,终于顿悟了,原来是Commit之前的操作都可以撤销啊,太神奇了,我终于明白数据库了,看书也是不在于多,在于书给人的提高,有的书看一本就明白了,那层纸就捅破了,有的书,看100本,也是原地踏步,或者互相抄袭来抄袭去,没质的提高。
用Oracle与SQLServer有一个明显的差别,在SQLServer里是傻瓜式的,默认情况下你要执行个什么SQL语句,一输入一执行就生效了,Oracle里执行SQL语句后,必须进行Commit递交,这个SQL语句的执行结果才会写入数据,例如你连续执行了10个Update 语句,但是你不进行Commit,直接关闭客户端,那数据库就不会写入,当时我真的很佩服Oracle的这个功能,真不亏是数据库老大,居然能撤销执行的一连串SQL语句,真的很神奇啊,说实话我到现在都很佩服,把以上的理解,用图解解释一下如下:
开发软件若真的把并发问题考虑得非常严格完美,处理并发相关的开发工作量至少会提高50%以上吧,虽然没有真正做过调查,国内几乎90%以上的软件系统都会存在事务、并发问题、或者是忽略了事务、并发问题,可能这么乱讲有些不对。
不好控制数据库事务的的几个例子:
DbHelper.ExecuteNonQuery(String sqlQuery) 类似 static 的静态方法,自动打开关闭数据库的,不好控制数据库事务、并发、锁定数据库等操作。
静态的数据库调用方法、自动打开关闭数据库的不好控制数据库事务,当然这种写程序的整体的代码量会非常少一些,写程序也简单一些,不用管Open、Close的事情了,单是对事务控制又带来了些麻烦了。
当然在走火入魔架构里这些灵活的、复杂的数据库访问架构都是支持的,请看介绍连接。
大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(零)数据库访问层
多用户并发、共享数据库连接情况下,不好控制数据库事务。
理想状态是:各管各的,互不干涉。
在不考虑存储过程中的事务等因素,数据库事务在走火入魔软件系统架构中在思路是,如下图解,主要以SOA体系为主导思想。有兴趣的请看连接SOA入门:
白话讲山寨SOA,少一些迷惑、多一些理解,你的程序架构SOA了吗?
C#代码参考如下:
在走火入魔.NET架构中,事务控制是被放在服务端实现的,大致示意图是:
错别之处请指正指点,愿意学习想学习是一个层次,学懂了看懂了是一个层次,能讲清楚理解清晰是一个层次,能把自己的理解写出来表达出来需要更好的水平,不要总鄙视我、打击我,还有很多人根本不理解,包括很出名的DNT架构里也没怎么处理数据库事务方面,动软代码生成器的底层数据库访问,也没怎么处理数据库事务,我也对比了很多出名的框架,整理出来的文档,我瞧不起那些,没有深入的人,乱放屁。
我也不是神仙,我也花了5-6个小时又是输入又是抓图,我这个是原创的文章,也没抄袭别人的劳动成果,也说明了适合初学者阅读,请你那些无知的家伙,睁大眼睛看看再说话。
导读:
疯狂.NET架构通用权限后台管理工具演示版2.0下载
一步步教你如何用疯狂.NET架构中的通用权限系统 -- 如何控制用户显示的菜单权限
一步步教你如何用疯狂.NET架构中的通用权限系统 -- 在页面中的调用权限讲解
一步步教你如何用疯狂.NET架构中的通用权限系统 -- 数据集权限的调用权限讲解
疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 --- 操作权限
疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 --- 角色权限
疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 --- 数据集权限
淘宝店地址:
http://list.taobao.com/browse/0/n-8ddf3d8a90550373fa749337efe29f03---------------40--commend-0-all-0.htm