首页 > 数据库 >升鲜宝生鲜配送供应链管理系统Mysql表结构数据字典的生成小工具V0.01

升鲜宝生鲜配送供应链管理系统Mysql表结构数据字典的生成小工具V0.01

时间:2024-12-01 16:54:19浏览次数:6  
标签:升鲜宝 Text Mysql System using new V0.01 Append string

最近最近要交付升鲜宝生鲜配送供应链管理系统源代码给上海的客户,需要将蓝湖UI设计图及数据字典交接给别人。在网上找了半天没有找到合适的根据Mysql生成Word数据字典,自己就写了几行代码,记录一下.后面可能会继续改造。主要的代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Net.Mime.MediaTypeNames;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Tab;
using System.Xml.Linq;
using MySql.Data.MySqlClient;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using Body = DocumentFormat.OpenXml.Wordprocessing.Body;
using Text = DocumentFormat.OpenXml.Wordprocessing.Text;
using DocumentFormat.OpenXml;

namespace DotNet.WinForm
{
    public partial class FrmCreateDBHtml : Form
    {
        public FrmCreateDBHtml()
        {
            InitializeComponent();
        }

        private void btnSave_Click(object sender, EventArgs e)
        {


            string connectionString = $"server={txtServer.Text};user={txtUser.Text};password={txtPassword.Text};database={txtDatabase.Text};";
            string wordFilePath = "升鲜宝数据字典.docx";

            try
            {
                GenerateDataDictionary(connectionString, wordFilePath);
                MessageBox.Show("Data dictionary has been generated successfully.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show($"An error occurred: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void BtnSave_Click(object sender, EventArgs e)
        {
            string connectionString = $"server={txtServer.Text};user={txtUser.Text};password={txtPassword.Text};database={txtDatabase.Text};";
            string wordFilePath = "DataDictionary.docx";

            try
            {
                GenerateDataDictionary(connectionString, wordFilePath);
                MessageBox.Show("Data dictionary has been generated successfully.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show($"An error occurred: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }




        static void GenerateDataDictionary(string connectionString, string wordFilePath)
        {
            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                connection.Open();
                DataTable tables = connection.GetSchema("Tables");

                using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(wordFilePath, DocumentFormat.OpenXml.WordprocessingDocumentType.Document))
                {
                    MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();
                    mainPart.Document = new Document();
                    Body body = new Body();

                    foreach (DataRow row in tables.Rows)
                    {
                        string tableName = row["TABLE_NAME"].ToString();
                        string tableComment = "";

                        // Get table comment
                        using (MySqlConnection commentConnection = new MySqlConnection(connectionString))
                        {
                            commentConnection.Open();
                            string commentQuery = $"SELECT TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{connection.Database}' AND TABLE_NAME = '{tableName}';";
                            MySqlCommand commentCommand = new MySqlCommand(commentQuery, commentConnection);
                            tableComment = commentCommand.ExecuteScalar()?.ToString() ?? "";
                        }

                        Paragraph tableTitle = new Paragraph(new Run(new Text($"Table: {tableName} - {tableComment}")));
                        body.Append(tableTitle);

                        // Add a gap between tables
                        body.Append(new Paragraph(new Run(new Text(" "))));

                        string query = $"DESCRIBE {tableName}";
                        MySqlCommand command = new MySqlCommand(query, connection);

                        using (MySqlDataReader reader = command.ExecuteReader())
                        {
                            Table wordTable = new Table();

                            // Set table properties for A4 page size and fixed width
                            TableProperties tblProperties = new TableProperties(
                                new TableWidth { Type = TableWidthUnitValues.Pct, Width = "5000" },
                                new TableBorders(
                                    new TopBorder { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 6 },
                                    new BottomBorder { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 6 },
                                    new LeftBorder { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 6 },
                                    new RightBorder { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 6 },
                                    new InsideHorizontalBorder { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 6 },
                                    new InsideVerticalBorder { Val = new EnumValue<BorderValues>(BorderValues.Single), Size = 6 }
                                ));
                            wordTable.AppendChild(tblProperties);

                            // Add table headers with bold text
                            TableRow headerRow = new TableRow();
                            headerRow.Append(CreateTableCell("列名", "1500", true)); // 150 px
                            headerRow.Append(CreateTableCell("字段类型", "1200", true)); // 120 px
                            headerRow.Append(CreateTableCell("是否为空", "800", true));  // 80 px
                            headerRow.Append(CreateTableCell("主键", "500", true));    // 50 px
                            headerRow.Append(CreateTableCell("说明", "3000", true));   // Remaining width
                            wordTable.Append(headerRow);

                            // Add table rows
                            while (reader.Read())
                            {
                                TableRow dataRow = new TableRow();
                                dataRow.Append(CreateTableCell(reader["Field"].ToString(), "1500"));
                                dataRow.Append(CreateTableCell(reader["Type"].ToString(), "1200"));
                                dataRow.Append(CreateTableCell(reader["Null"].ToString(), "800"));
                                dataRow.Append(CreateTableCell(reader["Key"].ToString(), "500"));

                                // Get column comment
                                string comment = "";
                                using (MySqlConnection commentConnection = new MySqlConnection(connectionString))
                                {
                                    commentConnection.Open();
                                    string commentQuery = $"SELECT COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '{connection.Database}' AND TABLE_NAME = '{tableName}' AND COLUMN_NAME = '{reader["Field"].ToString()}';";
                                    MySqlCommand commentCommand = new MySqlCommand(commentQuery, commentConnection);
                                    comment = commentCommand.ExecuteScalar()?.ToString() ?? "";
                                }
                                dataRow.Append(CreateTableCell(comment, "3000"));

                                wordTable.Append(dataRow);
                            }

                            body.Append(wordTable);
                        }
                    }

                    mainPart.Document.Append(body);
                }
            }
        }

        static TableCell CreateTableCell(string text, string width, bool isBold = false)
        {
            TableCell tableCell = new TableCell();
            TableCellProperties tableCellProperties = new TableCellProperties(
                new TableCellWidth { Type = TableWidthUnitValues.Pct, Width = width }
            );
            tableCell.Append(tableCellProperties);
            Run run = new Run(new Text(text));
            if (isBold)
            {
                run.RunProperties = new RunProperties(new Bold());
            }
            Paragraph paragraph = new Paragraph(run);
            tableCell.Append(paragraph);
            return tableCell;
        }
    }
}

 

  生成的数据字典效果如下:

  

遇到的问题如下:

      1.生成的时候,需要注意列宽,使之适应竖版A4的显示

       2.表名后面,需要加上中文的显示。

       3.每个表格之间,需要间隙,解决显示拥挤。

 

标签:升鲜宝,Text,Mysql,System,using,new,V0.01,Append,string
From: https://www.cnblogs.com/yousee/p/18579978

相关文章

  • windows电脑卸载mysql
    -1、怎么判断电脑上已经安装了mysql(以下是各种不同的判断方法)a、检查程序和功能设置(我明明安装了mysql,但是在这里并没有找到mysql相关的条目,猜测我并没有安装mysql客户端,所以在这里没找到)打开控制面板(win+R--->输入control)进入程序--->程序和功能在列表中......
  • mysql数据库的安装
    mysql安装(社区版):https://downloads.mysql.com/archives/installer/建议选full选项安装好进行配置1.复制如下路径(根据自己安装路径):##\##\MySQL\MySQLServer8.0\bin2.打开此电脑属性,再点击高级系统设置,点击环境变量,选择Path选项,双击对其进行编辑,新建一行并将复制的路径粘贴......
  • MySQL索引
      2.1索引概述2.1.1介绍索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。在无索引情况下,就需要从......
  • MySQL事务学习-2024-11-30
    [学习记录]MySQL事务锁的兼容情况总结-GPTS锁和X锁的兼容性在MySQL中,S锁(共享锁)和X锁(排他锁)的兼容性如下:锁类型S锁X锁S锁√兼容×不兼容X锁×不兼容×不兼容具体说明:S锁(共享锁):多个事务可以同时对同一数据加S锁(即允许多个事务同时读取数据)。如果一个事务已经持有......
  • 【MySQL】事务详解
    文章目录一、事务概念二、事务的ACID特性三、事务的使用四、事务的隔离级别五、SQL中的四种隔离级别六、事务的分类一、事务概念事务是数据库区别于文件系统的重要特性之一,当我们有了事务就会让数据库始终保持一致性,同时我们还能通过事务的机制恢复到某个时间点,这样......
  • MySQL原理简介—5.存储模型和数据读写机制
    MySQL原理简介—5.存储模型和数据读写机制大纲1.为什么不能直接更新磁盘上的数据2.为什么要引入数据页的概念3.一行数据在磁盘上是如何存储的4.一行数据中的NULL值是如何处理的5.一行数据的数据头存储的是什么6.一行数据的真实数据如何存储7.数据在物理存储时的行溢出......
  • MySQL中ORDER BY和GROUP BY是否走索引详解
    在MySQL数据库查询优化中,索引的使用是提高查询性能的重要手段。当我们使用ORDERBY和GROUPBY子句时,是否可以利用索引来加速查询,是数据库开发者非常关心的问题。本文将详细探讨MySQL中ORDERBY和GROUPBY如何与索引交互,以及它们在不同情况下的性能表现。一、索引基础在深......
  • mysql基础11.28
    系统数据库information-schema信息数据库mysql核心数据库performance_schema存储数据库服务器的性能参数sakila存放数据库样本sys系统的元数据信息world提供关于城市,国家和语言的相关信息创建数据库:createdatabase或者createschemacharacterset:指定数据库的字符......
  • 开发者必看:如何在IDEA中使用内网穿透工具实现远程连接本地Mysql数据库
    个人名片......
  • 基于智能Ai+SpringBoot+Vue+MySQL的数码论坛系统设计与实现(供毕业设计、课程设计参考)
    文章目录1.内容见下图2.详细视频演示3.系统运行效果介绍4.技术框架4.1前后端分离架构介绍4.3程序操作流程5.项目推荐6.成品项目7.系统测试7.1系统测试的目的7.2系统功能测试8.代码参考9.为什么选择我?10.获取源码1.内容见下图2.详细视频演示文章......