代码生成器工具之一

多年的代码开发工作中,用过的自动代码生成工具也不少了,有复杂的大家伙,也有公司同事们自己写的东东,不过除了CodeSmith等大家伙之外,能自己制定模板的并不多。

       不能使用模板,就意味着生成的代码不能更改,而生成代码的水平,就看开发人的了,实在是用的不舒服。

       那么,我们自己做一个好了。

       第一步:获取数据库的表列表和单表的表结构

        大家知道,数据库的表结构一般都是存储在系统表里的,针对不同的数据库,获取方式也不一样,我这里只是介绍针对SQL Server 2005的SQL,至于其他的数据库,就靠大家自己摸索了。

        1。获取数据库列表

         针对SQL2005,对于所有的数据库,都存在系统表“sysdatabases”中,获取起来比较简单

         select * from sysdatabases where name not in ('master','model','msdb','tempdb')

         where后面的语句是为了不获取SQL的系统数据库,大家可以不加条件,就能获取所有数据库了。

         2。获取指定数据库中的所有数据表/视图的列表

         针对SQL2005,所有表/视图,都存储在“sysobjects”系统表中,而所有表的字段信息,则主要存储在“syscolumns”系统表中,另外,还有一个重要的系统表“systypes”主要存储数据库中系统定义和用户自定义的数据类型。

         获取所有表的名字和每个表的字段数目:

        

string SqlStr_Tbl = @"select sysobjects.name ,count(*) as ColsCount 

                                        from syscolumns,sysobjects,systypes

                                        where syscolumns.id=sysobjects.id

                                        and syscolumns.xtype=systypes.xtype

                                        and sysobjects.type='U'

                                        and systypes.name <>&apos;_default_&apos;

                                        and systypes.name<>&apos;sysname&apos;

                                        group by sysobjects.name

                                        order by sysobjects.name";         获取所有视图的名字和每个视图的字段数目:

string SqlStr_Vw = @"select sysobjects.name ,count(*) as ColsCount 

                                        from syscolumns,sysobjects,systypes

                                        where syscolumns.id=sysobjects.id

                                        and syscolumns.xtype=systypes.xtype

                                        and sysobjects.type=&apos;V&apos;

                                        and systypes.name <>&apos;_default_&apos;

                                        and systypes.name<>&apos;sysname&apos;

                                        group by sysobjects.name

                                        order by sysobjects.name";       

           3。获取指定表的所有字段属性

            下面的语句中,只要代入不同的表/视图名,就可以获取该表的所有字段名字、字段长度、字段类型、字段说明、字段是否允许为空、是否主键、是否自增长字段等。

     string SqlStr = @"select syscolumns.name as ColName ,systypes.name as ColTypeName

                        , syscolumns.length, sys.extended_properties.value as Mark

                        ,syscolumns.isnullable as AllowNull

                        ,IsPK = Case

                        when exists

                        (

                        select 1

                        from sysobjects

                        inner join sysindexes

                        on sysindexes.name = sysobjects.name

                        inner join sysindexkeys

                        on sysindexes.id = sysindexkeys.id

                        and  sysindexes.indid = sysindexkeys.indid

                        where xtype=&apos;PK&apos;

                        and parent_obj = syscolumns.id 

                        and sysindexkeys.colid = syscolumns.colid

                        ) then 1

                        else 0

                        end

                        ,IsIdentity = Case syscolumns.status when 128 then 1 else 0 end

                        from syscolumns

                        inner join systypes on

                        (

                        syscolumns.xtype = systypes.xtype

                        and systypes.name <>&apos;_default_&apos;

                        and systypes.name<>&apos;sysname&apos;

                        )

                        left outer join sys.extended_properties on

                        (

                        sys.extended_properties.major_id=syscolumns.id

                        and minor_id=syscolumns.colid

                        )

                        where syscolumns.id = (select id from sysobjects where name=&apos;" + TableName + @"&apos;)

                        order by syscolumns.colid ";

好了,到现在为止,已经获取到了我们所需要的数据。

 

本文来自CSDN博客,转载请标明出处:G:/[C#]一步一步开发自己的自动代码生成工具之一:获取SQL2005的数据库表结构 - lemong的专栏 - CSDN博客.mht

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值