zoukankan      html  css  js  c++  java
  • 数据库表结构生成器v1.0发布

    发布一个小工具——数据库表结构生成器

    用途:面对大型项目,根据数据库表结构生成图片,可以瞬间摸清项目底细,一切尽在掌握。

    功能介绍:

    * 根据数据库表结构生成图片
    * 适用于MS Sql Server 2000, Sql Server 2005 and Sql Server 2008 etc.
    * 根据系统sql语句导出数据库表结构
    * 利用GDI+将表结构生成图片

    符程序截图:

    截图1:登录

    截图2:生成后

    截图3:生成的表结构

    下面记录下程序的实现思路:

    1. 连接到指定数据库,由特定系统sql语句得到数据表table
    2. 根据table name得到该表单表结构,如字段名、类型、长度以及注释说明等,当然,还有table的说明(注释)
      如图所示:
    3. 将该结果集利用GDI+技术生成图片并加上特定的修改.

    程序中用到很多sql server 系统sql语句,如下:

    • 得到sql server的版本
      exec master.dbo.xp_msver 'ProductVersion'

      介绍下sql server的发展历史:

      version  对应数据库
      7.0 是由Microsoft Sybase 和Ashton-Tate三家公司共同开发的,于1988 年推出了第一个OS/2 版本
      8.0 sql srever 2000
      9.0 sql server 2005
      10.0 sql server 2008
      11.0 sql server 2012(没试过,推测)






    • 得到非系统数据表——即得到用户自己创建的表
      SELECT 
          O.object_id AS TableId,
          TableName=O.name  ,
          TableDesc= PTB.[value]  
      FROM sys.columns C
          INNER JOIN sys.objects O
              ON C.[object_id]=O.[object_id]
                  AND O.type='U'
                  AND O.is_ms_shipped=0
          INNER JOIN sys.types T
              ON C.user_type_id=T.user_type_id
          LEFT JOIN sys.extended_properties PTB
              ON PTB.class=1 
                  AND PTB.minor_id=0 
                  AND C.[object_id]=PTB.major_id
      WHERE C.column_id=1 
      ORDER BY TableName
    • 根据表名得到表结构,类似于oracle或者mysql的desc 命令
      SELECT     
        TableName=case   when   a.colorder=1   then   d.name   else   ''   end,   
        TableDesc=case   when   a.colorder=1   then   isnull(f.value,'')   else   ''   end,   
          ColumnId=a.colorder,   
        ColumnName=a.name,   
        [Identity]=case   when   COLUMNPROPERTY(   a.id,a.name,'IsIdentity')=1   then   ''else   ''   end,   
        PrimaryKey=case   when   exists(SELECT   1   FROM   sysobjects   where   xtype='PK'   and   name   in   (   
        SELECT   name   FROM   sysindexes   WHERE   indid   in(   
        SELECT   indid   FROM   sysindexkeys   WHERE   id   =   a.id   AND   colid=a.colid   
        )))   then   ''   else   ''   end,   
        Type=b.name,   
          [Precision]=a.length,   
         Length=COLUMNPROPERTY(a.id,a.name,'PRECISION'),   
        Scale=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),   
         NullAble=case   when   a.isnullable=1   then   ''else   ''   end,   
        [Default]=isnull(e.text,''),   
        ColumnDesc=isnull(g.[value],'')   ,
      IndexName=case when isnull(h.索引名称,'') like 'IX_%' then '' else '' end,   
        IndexSort=case when isnull(h.索引名称,'') like 'IX_%' then isnull(h.排序,'') else '' end  
        FROM   syscolumns   a   
        left   join   systypes   b   on   a.xtype=b.xusertype   
        inner   join   sysobjects   d   on   a.id=d.id     and   d.xtype='U'   and     d.name<>'dtproperties'   
        left   join   syscomments   e   on   a.cdefault=e.id   
        left   join   sys.extended_properties g   on   a.id=g.major_id   and   a.colid=g.minor_id          
        left   join   sys.extended_properties f   on   d.id=f.major_id   and   f.minor_id   =0   
        left   join(   
        select   索引名称=a.name,c.id,d.colid   
        ,排序=case   indexkey_property(c.id,b.indid,b.keyno,'isdescending')   
        when   1   then   '降序'   when   0   then   '升序'   end   
        from   sysindexes   a   
        join   sysindexkeys   b   on   a.id=b.id   and   a.indid=b.indid   
        join   (--这里的作用是有多个索引时,取索引号最小的那个   
        select   id,colid,indid=min(indid)   from   sysindexkeys   
        group   by   id,colid)   b1   on   b.id=b1.id   and   b.colid=b1.colid   and   b.indid=b1.indid   
        join   sysobjects   c   on   b.id=c.id   and   c.xtype='U'   and     c.name<>'dtproperties'   
        join   syscolumns   d   on   b.id=d.id   and   b.colid=d.colid   
        where   a.indid   not   in(0,255)   
        )   h   on   a.id=h.id   and   a.colid=h.colid  
      
       where   d.name=N'{0}'         
        order   by   a.id,a.colorder
    • 剩下的重点应该就是GDI+了,这个就自己认真看代码吧 :)

    source code

    最后,最重要的是源代码在哪里? 在这,https://github.com/FrankFan/DatabasePicExporter

    可执行文件在这里:https://files.cnblogs.com/fanyong/DatabasePicExporter.rar

  • 相关阅读:
    第一章 快速入门
    增量式PID控制算法
    第二章 变量和基本类型
    位置式PID和增量式PID区别?
    I2C
    Linux系统进程调用列表
    Linux下I/O模型
    Linux下多路复用接口
    新浪博客网页编辑器PHP版带有上传图片功能
    晕死!博客园把我搞晕了!
  • 原文地址:https://www.cnblogs.com/fanyong/p/DatabasePicExporter.html
Copyright © 2011-2022 走看看