原创SQlServer数据库生成简单的说明文档包含(存储过程、视图、数据库批量备份)小工具(附源码)
这是一款简单的数据库文档生成工具,主要实现了SQlServer生成说明文档的小工具,目前不够完善,主要可以把数据库的表以及表的详细字段信息,导出到
Word中,可以方便开发人员了解数据库的信息或写技术说明文档。
技术上主要采用的 C#+Dapper+Npod ,开发工具为Vs2015,基于Net4.5框架。
操作Word代码
public void CreateToWord(List<string> list,string conStr,string db)
{
XWPFDocument doc = new XWPFDocument(); //创建新的word文档 XWPFParagraph p1 = doc.CreateParagraph(); //向新文档中添加段落 p1.Alignment = ParagraphAlignment.CENTER;
XWPFRun r1 = p1.CreateRun();
r1.FontFamily = "微软雅黑";
r1.FontSize = ;
r1.IsBold = true;
//向该段落中添加文字
r1.SetText(db+"数据库说明文档"); //XWPFParagraph p2 = doc.CreateParagraph();
//XWPFRun r2 = p2.CreateRun();
//r2.SetText("测试段落二"); #region 创建一个表格
if (list.Count > )
{ foreach (var item in list)
{ XWPFParagraph p3 = doc.CreateParagraph(); //向新文档中添加段落
p3.Alignment = ParagraphAlignment.LEFT;
XWPFRun r3 = p3.CreateRun(); //向该段落中添加文字
r3.FontFamily = "微软雅黑";
r3.FontSize = ;
r3.IsBold = true;
r3.SetText("表名:"+item); //从第二行开始 因为第一行是表头
int i = ;
var tabledetaillist = service.GetTableDetail(item, conStr);
XWPFTable table = doc.CreateTable(tabledetaillist.Count + , );
table.Width = ; #region 设置表头 //table.GetRow(0).GetCell(0).SetText("数据库名称");
XWPFParagraph pI = table.GetRow().GetCell().AddParagraph();
XWPFRun rI = pI.CreateRun();
rI.FontFamily = "微软雅黑";
rI.FontSize = ;
rI.IsBold = true;
rI.SetText("序号"); XWPFParagraph pI1 = table.GetRow().GetCell().AddParagraph();
XWPFRun rI1 = pI1.CreateRun();
rI1.FontFamily = "微软雅黑";
rI1.FontSize = ;
rI1.IsBold = true;
rI1.SetText("字段名称"); XWPFParagraph pI2 = table.GetRow().GetCell().AddParagraph();
XWPFRun rI2 = pI2.CreateRun();
rI2.FontFamily = "微软雅黑";
rI2.FontSize = ;
rI2.IsBold = true;
rI2.SetText("标识"); XWPFParagraph pI3 = table.GetRow().GetCell().AddParagraph();
XWPFRun rI3 = pI3.CreateRun();
rI3.FontFamily = "微软雅黑";
rI3.FontSize = ;
rI3.IsBold = true;
rI3.SetText("主键"); XWPFParagraph pI4 = table.GetRow().GetCell().AddParagraph();
XWPFRun rI4 = pI4.CreateRun();
rI4.FontFamily = "微软雅黑";
rI4.FontSize = ;
rI4.IsBold = true;
rI4.SetText("字段类型"); XWPFParagraph pI5 = table.GetRow().GetCell().AddParagraph();
XWPFRun rI5 = pI5.CreateRun();
rI5.FontFamily = "微软雅黑";
rI5.FontSize = ;
rI5.IsBold = true;
rI5.SetText("字段长度"); XWPFParagraph pI6 = table.GetRow().GetCell().AddParagraph();
XWPFRun rI6 = pI6.CreateRun();
rI6.FontFamily = "微软雅黑";
rI6.FontSize = ;
rI6.IsBold = true;
rI6.SetText("允许空"); XWPFParagraph pI7 = table.GetRow().GetCell().AddParagraph();
XWPFRun rI7 = pI7.CreateRun();
rI7.FontFamily = "微软雅黑";
rI7.FontSize = ;
rI7.IsBold = true;
rI7.SetText("字段默认值"); XWPFParagraph pI8 = table.GetRow().GetCell().AddParagraph();
XWPFRun rI8 = pI8.CreateRun();
rI8.FontFamily = "微软雅黑";
rI8.FontSize = ;
rI8.IsBold = true;
rI8.SetText("字段说明"); #endregion if (tabledetaillist != null && tabledetaillist.Count > )
{
foreach (var itm in tabledetaillist)
{
//第一列
XWPFParagraph pIO = table.GetRow(i).GetCell().AddParagraph();
XWPFRun rIO = pIO.CreateRun();
//rIO.FontFamily = "微软雅黑";
rIO.FontSize = ;
rIO.IsBold = true;
rIO.SetText(itm.index.ToString()); //第二列
XWPFParagraph pIO2 = table.GetRow(i).GetCell().AddParagraph();
XWPFRun rIO2 = pIO2.CreateRun();
//rIO2.FontFamily = "微软雅黑";
rIO2.FontSize = ;
rIO2.IsBold = true;
rIO2.SetText(itm.Title); XWPFParagraph pIO3 = table.GetRow(i).GetCell().AddParagraph();
XWPFRun rIO3 = pIO3.CreateRun();
//rIO3.FontFamily = "微软雅黑";
rIO3.FontSize = ;
rIO3.IsBold = true;
rIO3.SetText(itm.isMark.ToString()); XWPFParagraph pIO4 = table.GetRow(i).GetCell().AddParagraph();
XWPFRun rIO4 = pIO4.CreateRun();
//rIO4.FontFamily = "微软雅黑";
rIO4.FontSize = ;
rIO4.IsBold = true;
rIO4.SetText(itm.isPK.ToString()); XWPFParagraph pIO5 = table.GetRow(i).GetCell().AddParagraph();
XWPFRun rIO5 = pIO5.CreateRun();
//rIO5.FontFamily = "微软雅黑";
rIO5.FontSize = ;
rIO5.IsBold = true;
rIO5.SetText(itm.FieldType); XWPFParagraph pIO6 = table.GetRow(i).GetCell().AddParagraph();
XWPFRun rIO6 = pIO6.CreateRun();
//rIO6.FontFamily = "微软雅黑";
rIO6.FontSize = ;
rIO6.IsBold = true;
rIO6.SetText(itm.fieldLenth.ToString()); XWPFParagraph pIO7 = table.GetRow(i).GetCell().AddParagraph();
XWPFRun rIO7 = pIO7.CreateRun();
//rIO7.FontFamily = "微软雅黑";
rIO7.FontSize = ;
rIO7.IsBold = true;
rIO7.SetText(itm.isAllowEmpty.ToString()); XWPFParagraph pIO8 = table.GetRow(i).GetCell().AddParagraph();
XWPFRun rIO8 = pIO8.CreateRun();
//rIO8.FontFamily = "微软雅黑";
rIO8.FontSize = ;
rIO8.IsBold = true;
rIO8.SetText(itm.defaultValue.ToString()); XWPFParagraph pIO9 = table.GetRow(i).GetCell().AddParagraph();
XWPFRun rIO9 = pIO9.CreateRun();
//rIO9.FontFamily = "微软雅黑";
rIO9.FontSize = ;
rIO9.IsBold = true;
rIO9.SetText(itm.fieldDesc); i++;
}
} } } #endregion #region 存储过程
XWPFParagraph p2 = doc.CreateParagraph();
XWPFRun r2 = p2.CreateRun();
r2.FontSize = ;
r2.SetText("存储过程");
List<ProcModel> proclist = new List<ProcModel>();
proclist = service.GetProcList(conStr);
if(proclist.Count>)
{
foreach(var item in proclist)
{
//存储过程名称
XWPFParagraph pro1 = doc.CreateParagraph();
XWPFRun rpro1 = pro1.CreateRun();
rpro1.FontSize = ;
rpro1.IsBold = true;
rpro1.SetText("存储过程名称:"+item.procName);
//存储过程 详情
XWPFParagraph pro2 = doc.CreateParagraph();
XWPFRun rpro2 = pro2.CreateRun();
rpro2.FontSize = ;
rpro2.SetText(item.proDerails);
}
}
#endregion #region 试图
XWPFParagraph v2 = doc.CreateParagraph();
XWPFRun vr2 = v2.CreateRun();
vr2.FontSize = ;
vr2.SetText("视图");
List<ViewModel> viewlist = new List<ViewModel>();
viewlist = service.GetViewList(conStr);
if (proclist.Count > )
{
foreach (var item in viewlist)
{
//存储过程名称
XWPFParagraph vro1 = doc.CreateParagraph();
XWPFRun vpro1 = vro1.CreateRun();
vpro1.FontSize = ;
vpro1.IsBold = true;
vpro1.SetText("视图名称:" + item.viewName);
//存储过程 详情
XWPFParagraph vro2 = doc.CreateParagraph();
XWPFRun vpro2 = vro2.CreateRun();
vpro2.FontSize = ;
vpro2.SetText(item.viewDerails);
}
}
#endregion FileStream sw = File.Create("../../Doc/db.docx"); //...
doc.Write(sw); //...
sw.Close(); //在服务端生成文件 FileInfo file = new FileInfo("../../Doc/db.docx");//文件保存路径及名称 }
操作Word
/// <summary>
/// 测试连接数据库是否成功
/// </summary>
/// <returns></returns>
public bool ConnectionTest(string conStr)
{
//创建连接对象
mySqlConnection = new SqlConnection(conStr);
try
{
//Open DataBase
//打开数据库
mySqlConnection.Open();
IsCanConnectioned = true;
}
catch
{
//Can not Open DataBase
//打开不成功 则连接不成功
IsCanConnectioned = false;
}
finally
{
//Close DataBase
//关闭数据库连接
mySqlConnection.Close();
}
//mySqlConnection is a SqlConnection object
if (mySqlConnection.State == ConnectionState.Closed || mySqlConnection.State == ConnectionState.Broken)
{
//Connection is not available
return IsCanConnectioned;
}
else
{
//Connection is available
return IsCanConnectioned;
}
}
测试服务器是否连接成功
/// <summary>
/// 获取数据库列表
/// </summary>
/// <param name="conStr"></param>
/// <returns></returns>
public List<string> GetDBNameList(string conStr)
{
//List<DBName> list =new List<DBName>();
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<string>(sql).ToList();
return list;
}
}
catch
{
return null;
} }
获取数据库列表
/// <summary>
/// 获取字段的信息
/// </summary>
/// <param name="tableName"></param>
/// <param name="conStr"></param>
/// <returns></returns>
public List<TableDetail> GetTableDetail(string tableName, string conStr)
{
var list = new List<TableDetail>();
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<TableDetail>(sb.ToString()).ToList();
}
}
catch
{ } return list;
}
获取表字段详情
/// <summary>
/// 获取特定数据库里面的存储过程
/// </summary>
/// <param name="conStr"></param>
/// <param name="db"></param>
/// <returns></returns>
public List<ProcModel> GetProcList(string conStr)
{
var list = new List<ProcModel>();
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
{
// http://www.cnblogs.com/minideas/archive/2009/10/29/1591891.html
using (SqlConnection connection = new SqlConnection(conStr))
{
list = connection.Query<ProcModel>(sql).ToList();
}
}
catch
{ }
return list;
}
获取特定数据库里面的存储过程
实现思路:
1、首先获取数据库的字符串,测试链接是否成功,
2、通过脚本获取该服务器的数据库列表。
3、根据数据库找到该数据库的所有数据表
4、通过脚本找到该数据表所有的字段信息
5、使用Npoi技术把信息导出到Word中去。
效果如下:
文档效果
目前功能比较简单,后续会慢慢完善,当然自己技术有限,欢迎高手多多指点!
Github地址:https://github.com/hgmsq/SqlToDocTool
原创SQlServer数据库生成简单的说明文档包含(存储过程、视图、数据库批量备份)小工具(附源码)的更多相关文章
- 原创SQlServer数据库生成简单的说明文档小工具(附源码)
这是一款简单的数据库文档生成工具,主要实现了SQlServer生成说明文档的小工具,目前不够完善,主要可以把数据库的表以及表的详细字段信息,导出到 Word中,可以方便开发人员了解数据库的信息或写技术 ...
- 利用js编写一个简单的html表单验证,验证通过时提交数据(附源码)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- (原创)通用查询实现方案(可用于DDD)[附源码] -- 简介
[声明] 写作不易,转载请注明出处(http://www.cnblogs.com/wiseant/p/3985353.html). [系列文章] 通用查询实现方案(可用于DDD)[附源码] -- ...
- 原创:用python把链接指向的网页直接生成图片的http服务及网站(含源码及思想)
原创:用python把链接指向的网页直接生成图片的http服务及网站(含源码及思想) 总体思想: 希望让调用方通过 http调用传入一个需要生成图片的网页链接生成一个网页的图片并返回图片链接 ...
- H5类似易企秀/编辑器/页面制作/开发/生成工具/软件/源码/授权
代码地址如下:http://www.demodashi.com/demo/14960.html 项目简介 H5DS (HTML5 Design software) 这是一款基于WEB的 H5制作工具. ...
- (原创)通用查询实现方案(可用于DDD)[附源码] -- 设计思路
[声明] 写作不易,转载请注明出处(http://www.cnblogs.com/wiseant/p/3988592.html). [系列文章] 通用查询实现方案(可用于DDD)[附源码] -- ...
- 极限挑战—C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)
原文:极限挑战-C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码) 实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本实验将使用5中方法完成这个过程,并详细记录各种方 ...
- 开源方案搭建可离线的精美矢量切片地图服务-8.mapbox 之sprite大图图标文件生成(附源码)
项目成果展示(所有项目文件都在阿里云的共享云虚拟主机上,访问地图可以会有点慢,请多多包涵). 01:中国地图:http://test.sharegis.cn/mapbox/html/3china.ht ...
- PHP简单的长文章分页教程 附源码
PHP简单的长文章分页教程 附源码.本文将content.txt里的内容分割成3页,这样浏览起来用户体验很好. 根据分页参数ipage,获取对应文章内容 include('page.class.php ...
随机推荐
- 手把手教你读取Android版微信和手Q的聊天记录(仅作技术研究学习)
1.引言 特别说明:本文内容仅用于即时通讯技术研究和学习之用,请勿用于非法用途.如本文内容有不妥之处,请联系JackJiang进行处理! 我司有关部门为了获取黑产群的动态,有同事潜伏在大量的黑产群 ...
- 干了这碗鸡汤:从理发店小弟到阿里P10技术大牛
1.引言 MIT TR 35(MIT Technology Review 35 Innovators Under 35)——“全球 35 位 35 岁以下科技创新青年”榜单,是全球最权威的青年科技创新 ...
- Go语言复制文件
需要使用io包的Copy方法 package main import ( "fmt" "io" "os" ) //自己编写一个函数,接收两个 ...
- Kali学习笔记24:Nikto、Skipfish
文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 实验环境: Kali机器IP:192.168.163. ...
- HystrixCommand实战
1. HystrixCommand实战 1.1. 需求 由于前端公共调用入口接口代码,封装在单独的jar包,它不属于springCloud管理,所以不适合用注解的方式@HystrixCommand进行 ...
- python常用的十进制、16进制之间的转换
一 整数之间的进制转换: hex(16) # 10进制转16进制 oct(8) # 10进制转8进制 bin(8) # 10进制转2进制 二 字符串转整数 int(') # 字符串转换成10进制整数 ...
- ubuntu默认的Python版本号修改
ubuntu默认的Python是2.7版本的,键入Python3 就可以使用Python3.X版本.下面修改默认的Python版本, 1.删除/usr/bin 下的Python链接 sudo rm / ...
- 机器学习入门10 - 正则化:简单性(Regularization for Simplicity)
原文链接:https://developers.google.com/machine-learning/crash-course/regularization-for-simplicity 正则化指的 ...
- 持续集成工具之Jenkins
Jenkins是一个很好的持续集成工具,不光可以帮助开发进行自动打包,自动验证升级和安装,也可以帮助测试人员定时执行测试任务,或者在开自动打包安装之后自动执行测试任务,实现打包-安装-测试一条线服务, ...
- ubuntu16.04 在线安装docker ce
官方文档:https://docs.docker.com/install/linux/docker-ce/ubuntu/ ubuntu创建普通用户: adduser dk001 给该用户添加sud ...