实时

您的位置:首页>资讯 >

开源项目:数据库表结构生成文档工具

一、软件介绍

今天给大家分享我自己编写的数据库表结构文档生成工具,方便大家在实际开发当中,可以很方便导出业务系统的表结构,也可以作为项目验收文档中数据库设计文档使用。这样可以大大减少编写数据库表结构文档的时间,有需要的朋友欢迎下载或者沟通交流!

二、技术框架

●编程语言:C# ( Net Framework4.5.5)

●数据库技术框架:Dapper


【资料图】

●导出Word文档:NPOI

●访问方式:WinForm窗体应用程序,Windows操作系统可以直接运行

三、功能介绍

●支持SQLServer、MySQL(5.7、8.0)、SQLite 三种类型的数据,持续更新

●支持Word、Html、MarkDown 三种格式的导出

●导出内容包含数据表(字段详情、字段注释、长度、默认值等)、创建表脚本、视图及视图脚本、存储过程及脚本

●支持生成文档的同时直接打开文档

●支持数据库备份(目前只支持SQLServer导出bak备份文件)

四、代码展示1、获取数据库信息部分代码
///         /// 获取数据库字符串        ///         ///         ///         ///         ///         ///         public string GetConnectioning(string servername, string uid, string pwd, string db, string port)        {            return string.Format("server={0};uid={1};pwd={2};database={3}", servername, uid, pwd, db);        }        ///         /// 获取数据库列表        ///         ///         ///         public List GetDBNameList(string conStr)        {            //List list =new List();            string sql = "select [name] from master.dbo.sysdatabases where DBId>6 Order By [Name] ";            try            {                using (SqlConnection connection = new SqlConnection(conStr))                {                    var list = connection.Query(sql).ToList();                    return list;                }            }            catch            {                return null;            }        }        public List GetDBList(string conStr)        {            //List list =new List();            string sql = "select [name] from master.dbo.sysdatabases where DBId>6 Order By [Name] ";            try            {                using (SqlConnection connection = new SqlConnection(conStr))                {                    var list = connection.Query(sql).ToList();                    return list;                }            }            catch            {                return null;            }        }        ///         /// 获取特定数据库的表名列表        ///         ///         ///         public List GetDBTableList(string conStr, string dbName = "")        {            var list = new List();            //string sql = "SELECT TABLE_NAME as name FROM INFORMATION_SCHEMA.TABLES where TABLE_TYPE="BASE TABLE" ";            string sql = "select a.name AS tableName,CONVERT(NVARCHAR(100),isnull(g.[value],"")) AS tableDesc from sys.tables a left join sys.extended_properties g on (a.object_id = g.major_id AND g.minor_id = 0)";            try            {                using (SqlConnection connection = new SqlConnection(conStr))                {                    list = connection.Query(sql).ToList();                }            }            catch            {            }            return list;        }        ///         /// 获取特定数据库里面的存储过程        ///         ///         ///         ///         public List GetProcList(string conStr, string dbName = "")        {            var list = new List();            string sql = @"  select name as procName, (select text from syscomments where id=OBJECT_ID(name)) as proDerails                         from dbo.sysobjects  o  where OBJECTPROPERTY(id, N"IsProcedure") = 1 order by name  ";            try            {                               using (SqlConnection connection = new SqlConnection(conStr))                {                    list = connection.Query(sql).ToList();                }            }            catch            {            }            return list;        }        ///         /// 获取特定数据库里面的视图        ///         ///         ///         ///         public List GetViewList(string conStr, string dbName = "")        {            var list = new List();            string sql = @"  select name as viewName, (select text from syscomments where id=OBJECT_ID(name)) as viewDerails                         from dbo.sysobjects  o  where OBJECTPROPERTY(id, N"IsView") = 1 order by name  ";            try            {                              using (SqlConnection connection = new SqlConnection(conStr))                {                    list = connection.Query(sql).ToList();                }            }            catch            {            }            return list;        }        ///         /// 获取字段的信息        ///         ///         ///         ///         public List GetTableDetail(string tableName, string conStr, string dbName = "")        {            var list = new List();            StringBuilder sb = new StringBuilder();            sb.Append("SELECT [index] = a.colorder,    Title = a.name,    isMark =        CASE    WHEN COLUMNPROPERTY(a.id, a.name, "IsIdentity") = 1 THEN "1" ELSE "0" END, ");            sb.Append("isPK =  CASE   WHEN EXISTS(SELECT  1  FROM sysobjects WHERE xtype = "PK" AND parent_obj = a.id AND name IN(SELECT name  FROM sysindexes WHERE indid IN(SELECT indid  FROM sysindexkeys  WHERE id = a.id AND colid = a.colid)) ) THEN "1" ELSE "0" END, ");            sb.Append(" FieldType = b.name,fieldLenth = COLUMNPROPERTY(a.id, a.name, "PRECISION"),isAllowEmpty =  CASE   WHEN a.isnullable = 1 THEN "1" ELSE "0" END, defaultValue = ISNULL(e.text, ""), fieldDesc = ISNULL(g.[value], "") ");            sb.Append("FROM syscolumns a LEFT JOIN systypes b  ON a.xusertype = 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 ");            sb.Append("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");            //--如果只查询指定表,加上此红色where条件,tablename是要查询的表名;去除红色where条件查询说有的表信息            sb.Append("WHERE d.name = "" + tableName + "" ORDER BY a.id, a.colorder, d.name");            try            {                using (SqlConnection connection = new SqlConnection(conStr))                {                    list = connection.Query(sb.ToString()).ToList();                }            }            catch            { }            return list;        }
2、导出Html文档代码

///         /// 生成html文件        ///         ///         ///         ///         ///         public void CreateToHtml(List list, string conStr, string db, int type, List checkList)        {            StringBuilder sb = new StringBuilder();            sb.Append("");            sb.Append("数据库说明文档");            sb.Append("");            sb.Append("

" + db + "数据库说明文档

"); GetDBService(type); #region 创建一个表格 if (checkList.Where(m => m.Equals("表")).Count() > 0) { sb.Append("

一、表结构

"); sb.Append(""); sb.Append(""); if (list.Count > 0) { foreach (var item in list) { if (item.tableDesc != null && item.tableDesc != "") { sb.Append("

表名:" + item.tableName + "(" + item.tableDesc + ")

"); } else { sb.Append("

表名:" + item.tableName + "

"); } sb.Append(" "); sb.Append(""); sb.Append(""); //从第二行开始 因为第一行是表头 int i = 1; var tabledetaillist = service.GetTableDetail(item.tableName, conStr, db); if (tabledetaillist != null && tabledetaillist.Count > 0) { foreach (var itm in tabledetaillist) { sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); i++; } } sb.Append("
序号字段名称标识主键字段类型字段长度允许空值字段默认值字段备注
" + itm.index + "" + itm.Title + "" + itm.isMark + "" + itm.isPK + "" + itm.FieldType + "" + itm.fieldLenth + "" + itm.isAllowEmpty + "" + itm.defaultValue + "" + itm.fieldDesc + "
"); sb.Append("

" + item.tableName + "建表脚本


"); sb.Append("" + service.GetTableSQL(item.tableName, conStr) + ""); } } } #endregion #region 存储过程 if (checkList.Where(m => m.Equals("存储过程")).Count() > 0) { List proclist = new List(); proclist = service.GetProcList(conStr, db); sb.Append("

二、存储过程

"); if (proclist != null && proclist.Count > 0) { foreach (var item in proclist) { sb.Append("

存储过程名称:" + item.procName + "

"); sb.Append("" + item.proDerails + ""); } } } #endregion #region 视图 if (checkList.Where(m => m.Equals("视图")).Count() > 0) { List viewlist = new List(); viewlist = service.GetViewList(conStr, db); sb.Append("

三、视图

"); if (viewlist.Count > 0) { foreach (var item in viewlist) { sb.Append("

视图名称:" + item.viewName + "

"); sb.Append("" + item.viewDerails + ""); } } } #endregion sb.Append(""); sb.ToString(); string filename = db + "-数据库说明文档";//文件名 SaveFileDialog saveDialog = new SaveFileDialog(); saveDialog.DefaultExt = "html"; saveDialog.Filter = "html文件|*.html"; saveDialog.FileName = filename; saveDialog.ShowDialog(); filename = saveDialog.FileName; if (filename.IndexOf(":") < 0) return; //被点了取消 StreamWriter sw1 = new StreamWriter(saveDialog.FileName, false); sw1.WriteLine(sb); sw1.Close(); System.Diagnostics.Process.Start(filename); }

五、运行效果

应用程序主界面

支持三种生成文档类型:每次只能选择一种,推荐使用markdown格式

Word文档生成效果

Html文档生成效果

MarkDown文档效果

针对SQLServer数据库备份

六、项目开源地址

GitHub:​​https://github.com/hgmsq/SqlToDocTool​​

Gitee:​​https://gitee.com/hgm1989/SqlToDocTool​​

Gitcode:​​https://gitcode.net/xishining/SqlToDocTool​​​

关键词:

推荐阅读
一、软件介绍今天给大家分享我自己编写的数据库表结构文档生成工具,方便大家在实际开发当中,可以很方便导出业务系统的表结构,也可以作为项

2023-03-29 11:22:19

湖北省纪委监委网站3月29日消息,中超联赛有限责任公司原总经理董铮涉嫌严重违法,目前正接受中央纪委国家监委驻国家体育总局

2023-03-29 10:42:54

新京报讯(记者张晓兰)3月28日,中国金茂控股集团有限公司(简称“中国金茂”)发布2022年度业绩公告。2022年,中国金茂实现收入829 91亿元,

2023-03-29 10:02:43

在国内很多消费者都对全新的第四代铃木吉姆尼情有独钟,尤其是其方正的车身造型与小巧却精悍的颜值,并且越野能力也完全有能力PK一下JEEP牧马

2023-03-29 09:09:45

3月28日,科达制造(600499)融资买入1355 87万元,融资偿还2050 33万元,融资净卖出694 46万元,融资余额18 58亿元。

2023-03-29 07:18:12

1、摩尔庄园里的RK吧,从小学开始喜欢,虽然后来长大知道了怪盗基德,但RK一直都在心里,一直都是那个喜欢恶作剧,但也有自

2023-03-29 05:14:20

应用文写作写作题范文第1篇主题:每篇应用文都要围绕着一个主题展开。主题越是具体专一,应用文就越容易写出为谁而写:私人信件为家人、朋友、

2023-03-29 00:52:06

1、我给你一批,看看以后是不是都能用上。2、:)瓜熟蒂落――水到渠成鼎新革故――激浊扬清守株待兔――缘木求鱼见风

2023-03-28 22:11:26

锦江酒店2022年度净利1 13亿同比增长18 67%期末公允价值上升2023 3 2819:54:08挖贝网丁易涵挖贝网3月28日,锦江酒店(6

2023-03-28 21:02:29

近日,海南省人民政府办公厅印发《关于支持民营经济发展的若干措施》(以下简称《若干措施》),从持续优化民营经济发展环境、全力促进民营企业

2023-03-28 19:21:57

南向资金今日净买入28 93亿港元。腾讯控股、美团-W、快手-W分别获净买入9 06亿港元、5 74亿港元、2 15亿港

2023-03-28 18:50:24

河南广电·大象新闻记者吴彦飞通讯员金正义王静近年来,信阳市潢川县政务服务大厅聚焦群众需求,不断探索便民服务新模式

2023-03-28 17:51:46

紧凑型纯电SUV,一直以来都具有较高的竞争力,而元PLUS(图片|配置|询价),总是能受到广大消费者认可,二月份销量了20279台(数据来自懂车帝排

2023-03-28 17:00:40

大家好该疫情数据更新统计周期为昨日0时起至24时,非今日实时数据,数据来源于百度疫情,根据疫情实时追踪,整理出疫情消息给大家了解下,希望

2023-03-28 16:03:11

3月28日,“彤心向阳·科技兴邦”黑龙江省各族青年科技工作者交流活动启动仪式于日在哈尔滨工程大学举行。活动由黑龙江省民宗委、黑龙江省科协

2023-03-28 15:05:44

程向民一行随后来到庄信万丰(上海)催化剂有限公司,听取企业当前发展情况与年度发展计划的介绍,并深入了解企业发展诉求,帮助企业解决实际

2023-03-28 13:38:59

欢迎观看本篇文章,小勉来为大家解答以上问题。什么动物最没有方向感,什么是谜语很多人还不知道,现在让我们一起来看看吧!1、

2023-03-28 12:08:40

谷歌宣布将于2月8日举行活动,计划展示其为未来搜索和人工智能(AI)而开发的新技术。虽然该公司没有透露有关该活

2023-03-28 10:51:19

1、胎儿期:营养不良影响身高。2、如果孕期营养不良,15%—20%的宝宝出生后身高将受连累。3、这就像盖楼挖地基一样,如

2023-03-28 10:04:22

1、首先我们需要准备鸡蛋,打到碗里,加点盐,打鸡精,一定要打得很散。2、然后加入温开水,边加水边搅拌,继续搅拌均匀,用小

2023-03-28 08:45:56