老生常谈,根据表结构生成代码

[起因]

   大多数朋友应该都有这样的经历,在工作中,经常从"自己的老系统"里找代码,因为功能差不多,页面差不多,如果有现成的修改下,工作量肯定会小很多
新的功能一般开发完成后也都会留有备份,这时候,哪些功能自己曾经写过,哪些没有写过,哪些部分可以重用,心里非常清楚,这样在用的时候找就可以了,或许这也是经验的组成部分,这种经历不多阐述了,相信各位都能体会到

   然而,虽说COPY非常轻松,但是人脑毕竟不是电脑,有时候突然发现移动硬盘坏了,或者光盘读不出来了,再或者找不到U盘了,就是说由于某种原因"经验"丢了,怎么办?呵呵,天无绝人之路,我还记得关键字呢(此功能自己未实现过,但了解从哪里可以查阅到),百度一下,谷歌一下,问题还是解决了.

   最终有一天出现特殊情况了,如,网速奇慢,或者搬家后暂时无网络,再或者公司禁网,再或者网站更新或者关闭,等等一系列原因导致自己不得不重新写这些代码,真不走运,花费一些时间重新编写,重新测试,重新发现那些非常熟悉的但不小心忽略了的BUG,再修改,再编译,再测试,最终问题解决.但是花费了一些时间和精力,同时兴趣值减少10%

   鉴于上述情况,遂决定开发这么一款小软件,使得可以自动生成自己经常需要用的代码,我非常相信各位在较短的时间内都可以开发出来,因为它确实灰常简单,但是比较"麻烦",以致于我每次写重复代码的时候想到要写这么一个工具出来,然而每次又都因为它的局限性,应用范围和其它原因放弃掉了,一次一次的想,一次一次的放弃,最终决定无论什么原因都坚持下去,把它写出来,哪怕只是用一次,坚决让电脑去做它能做到的事情,解放我出来,这个小软件诞生了.甚至连名字都没有想好

[介绍]
    感觉有必要说一下设计思路及实现过程
思路
基本思路就是,连接数据库--->从库中获取所有表列表--->查询得到表字段信息

提供代码模板,使用固定标签名称--->使用上述得到的表字段信息进行替换标签的工作--->将替换后的字符串以.CS为扩展名保存到本地

其中,代码模板可有限维护,所谓有限维护是指不大可能完全变样,因为替换的就那么几个系统变量,如表名,字段名,当前时间等等,如果整个模板都变了的话,在新模板时我不清楚是否还需要这些系统变量?如果不需要!@#$%^&


[实现过程]
     在获取库中所有表列表时发现自己不会写,SQL知识非常弱,不过最终得到了解答,实在对那些系统表里的字段不了解,仔细学习应该还能提到更多信息
[code=SQL]SELECT NAME FROM DBO.SYSOBJECTS WHERE OBJECTPROPERTY(ID, N'ISUSERTABLE') = 1 ORDER BY [NAME][/code]
上句是取表列表

查询表的字段信息同样从网上搜出来的,这一句是取字段信息,原文见下边
http://www.cnblogs.com/mingyeh/archive/2008/06/17/1223516.html
代码如下

ContractedBlock.gif ExpandedBlockStart.gif Code
string sql = string.Format(@"
                            SELECT
                                syscolumns.colid,
                                Sysobjects.name AS [TableName],
                                syscolumns.name AS [ColumnName],
                                systypes.name AS [DataType],
                                syscolumns.length AS [DataLength],
                                sys.extended_properties.[value] AS [Description],  
                                syscomments.text AS [DefaultValue],
                                syscolumns.isnullable AS [NullAble]    
                            FROM
                                syscolumns INNER JOIN systypes
                                ON syscolumns.xtype = systypes.xtype
                                LEFT JOIN sysobjects ON syscolumns.id = sysobjects.id
                                LEFT OUTER JOIN sys.extended_properties ON
                                ( sys.extended_properties.minor_id = syscolumns.colid
                                AND sys.extended_properties.major_id = syscolumns.id)
                                LEFT OUTER JOIN syscomments ON syscolumns.cdefault = syscomments.id
                            WHERE syscolumns.id IN
                            (SELECT id FROM SYSOBJECTS WHERE xtype = 'U' AND NAME = '{0}') AND (systypes.name <> 'sysname')
                            ORDER BY syscolumns.colid
", tbName);


查询表的主键,刚还在坛子里看见有人问了,还回记住了,

sp_pkeys 表名


这个是取表主键,这些都得到了,相信下边的工作更没有什么难度了,无非是取模板数据,替换固定标签之类,不再多说,最后提供源码下载

今天刚发现的一个更全面的文章,必须的~贴上,备注

http://www.cnblogs.com/over140/archive/2008/12/23/1360150.html

[源码]

小灰SVN
svn://svnhost.cn/CodeCreate
http://www.svnhost.cn/Project/Detail-202.shtml

在下的个人主页
http://www.tstring.com.cn

生成代码的方法除了模板+标签外,还有其它解决方案吗?有的,只是不够灵活而已,感兴趣的朋友可以搜索System.CodeDom相关资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值