首页 > 数据库 >CodeSmith无法获取MySQL表及列Description说明处理

CodeSmith无法获取MySQL表及列Description说明处理

时间:2022-09-24 14:45:31浏览次数:86  
标签:Description list 表及 Add ExtendedProperty MySQL CS new string

实体类生成模板下载:

链接:https://pan.baidu.com/s/1tLxW5m5ECwVV2feWSVtQIA
提取码:qezw

反编译工具下载:

链接:https://pan.baidu.com/s/19dG4NweQodLl0yG5XQrcOg
提取码:r793

一、使用反编译工具dnSpy打开D:\software\generator71(1)\generator-71\SchemaProviders\SchemaExplorer.MySQLSchemaProvider.dll

二、找到MySQLSchemaProvider类

 

 

 三、找到GetExtendedProperties方法名,使用反编译工具编辑该类,替换GetExtendedProperties的代码逻辑并进行保存

public ExtendedProperty[] GetExtendedProperties(string connectionString, SchemaObjectBase schemaObject)
        {
            List<ExtendedProperty> list = new List<ExtendedProperty>();
            if (schemaObject is ColumnSchema)
            {
                ColumnSchema columnSchema = schemaObject as ColumnSchema;
                string commandText = string.Format("SELECT EXTRA, COLUMN_DEFAULT, COLUMN_TYPE, COLUMN_COMMENT\r\n                                                        FROM INFORMATION_SCHEMA.COLUMNS\r\n                                                        WHERE TABLE_SCHEMA = '{0}' AND TABLE_NAME = '{1}' AND COLUMN_NAME = '{2}'", columnSchema.Table.Database.Name, columnSchema.Table.Name, columnSchema.Name);
                using (DbConnection dbConnection = MySQLSchemaProvider.CreateConnection(connectionString))
                {
                    dbConnection.Open();
                    DbCommand dbCommand = dbConnection.CreateCommand();
                    dbCommand.CommandText = commandText;
                    dbCommand.Connection = dbConnection;
                    using (IDataReader dataReader = dbCommand.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        while (dataReader.Read())
                        {
                            string text = dataReader.GetString(0).ToLower();
                            bool flag = dataReader.IsDBNull(1);
                            string value = "";
                            if (!flag)
                            {
                                value = dataReader.GetString(1).ToUpper();
                            }
                            string value2 = dataReader.GetString(2).ToUpper();
                            string @string = dataReader.GetString(3);
                            bool flag2 = text.IndexOf("auto_increment") > -1;
                            list.Add(new ExtendedProperty("CS_IsIdentity", flag2, columnSchema.DataType));
                            if (flag2)
                            {
                                list.Add(new ExtendedProperty("CS_IdentitySeed", 1, columnSchema.DataType));
                                list.Add(new ExtendedProperty("CS_IdentityIncrement", 1, columnSchema.DataType));
                            }
                            list.Add(new ExtendedProperty("CS_ColumnDefaultIsNull", flag, DbType.Boolean));
                            list.Add(new ExtendedProperty("CS_Default", value, DbType.String));
                            list.Add(new ExtendedProperty("CS_ColumnDefault", value, DbType.String));
                            list.Add(new ExtendedProperty("CS_SystemType", value2, DbType.String));
                            list.Add(new ExtendedProperty("CS_ColumnType", value2, DbType.String));
                            list.Add(new ExtendedProperty("CS_ColumnExtra", text.ToUpper(), DbType.String));
                            list.Add(new ExtendedProperty("CS_Description", @string, DbType.String));
                        }
                        if (!dataReader.IsClosed)
                        {
                            dataReader.Close();
                        }
                    }
                    if (dbConnection.State != ConnectionState.Closed)
                    {
                        dbConnection.Close();
                    }
                }
            }
            if (schemaObject is TableSchema)
            {
                TableSchema tableSchema = schemaObject as TableSchema;
                string commandText2 = string.Format("SHOW CREATE TABLE `{0}`.`{1}`", tableSchema.Database.Name, tableSchema.Name);
                using (DbConnection dbConnection2 = MySQLSchemaProvider.CreateConnection(connectionString))
                {
                    dbConnection2.Open();
                    DbCommand dbCommand2 = dbConnection2.CreateCommand();
                    dbCommand2.CommandText = commandText2;
                    dbCommand2.Connection = dbConnection2;
                    using (IDataReader dataReader2 = dbCommand2.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        while (dataReader2.Read())
                        {
                            string string2 = dataReader2.GetString(1);
                            list.Add(new ExtendedProperty("TS_Description", string2, DbType.String));
                            int num = string2.LastIndexOf("ENGINE");
                            int num2 = string2.LastIndexOf("COMMENT=");
                            string value3 = dataReader2.GetString(0);
                            if (num2 > num)
                            {
                                value3 = string2.Substring(num2 + 9).Replace("'", "");
                            }
                            list.Add(new ExtendedProperty("CS_Description", value3, DbType.String));
                        }
                        if (!dataReader2.IsClosed)
                        {
                            dataReader2.Close();
                        }
                    }
                    if (dbConnection2.State != ConnectionState.Closed)
                    {
                        dbConnection2.Close();
                    }
                }
            }
            return list.ToArray();
        }

四、生成效果

 

标签:Description,list,表及,Add,ExtendedProperty,MySQL,CS,new,string
From: https://www.cnblogs.com/sportsky/p/16722007.html

相关文章

  • mysql可视化工具连接mysql时报错client does not support authentication
    一、问题背景用MySQL可视化工具连接数据库,异常报错信息如下:二、报错信息如下连接mysql时报错clientdoesnotsupportauthentication三、我的项目配置如下无四、......
  • mysql between and 实测索引时效问题
    数据量大概10Wexplainselectcount(*)frompredictionswherepredictions.deleted_atisnulland(in_timebetween'2022-09-01'and'2022-09-13')上面的走索引......
  • linux 启动mysql失败 InnoDB: Table flags are 0 in the data dictionary but the fla
    linux启动mysql失败,报错日志文件里的报错信息InnoDB:Tableflagsare0inthedatadictionarybuttheflagsinfile./ibdata1are0x4800!执行 sudosystemctl......
  • pymysql 处理pymysql取值带有Decimal和datetime.datatime的数据
    importpymysqlfromloguruimportloggerfrompymysqlimportconverters,FIELD_TYPEconv=converters.conversionsconv[FIELD_TYPE.NEWDECIMAL]=float#con......
  • 用Superset学习MySQL
    链接:Superset用户消费频次消费频次用户数分布(freq,userNum)要注意的是必须将派生表重新命名(如t1)。用户最后一次消费日期为什么一定要用GROUPBY才成功?每......
  • MySQL8 修改root用户登录密码
    在安装MySQL数据库的时候,默认不操作可能会是一个空密码。如果要设置登录密码,很多之前的旧方式,在mysql8中都不适用了,下面的这个是可以操作成功的修改mysql数据库中的user......
  • yaml代替mysql
    前言本地跑一个小项目当然不想还拿mysql了说不定要发给别人还得让别人搞个mysql,再不济得搞云又或者整sqllite,但学习成本.............所以要找个代替的...要是几年前......
  • 【转载】SQL Server跨服务器操作数据库——通过链接服务器(LinkedServer)实现SQL Serv
     基础知识介绍以SQLServer的数据库管理工具SSMS(SQLServerManagementStudio)为平台进行操作。SQLServerManagementStudio(SSMS)是用于管理SQLServer基础结......
  • Mysql数据类型
    数据库引擎InnoDB​5.5版本后MySQL默认数据库引擎,支持事物和行级锁定,只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁。行级锁不是直接锁记录,而......
  • MySQL写入SQL整个执行流程
    innodb存储引擎中一条sql写入的详细流程   第0步:会先去看缓冲区有没有这条数据,如果有就不进行缓存,直接进入第三步。 第1步:会将要修改的那一行数据所在的一整页......