zoukankan      html  css  js  c++  java
  • 解决CodeSmith无法获取MySQL表及列Description说明注释的方案

    public ExtendedProperty[] GetExtendedProperties(string connectionString, SchemaObjectBase schemaObject)
            {
                List<ExtendedProperty> extendedProperties = new List<ExtendedProperty>();
    
                if (schemaObject is ColumnSchema)
                {
                    ColumnSchema columnSchema = schemaObject as ColumnSchema;
    
                    string commandText = string.Format(@"SELECT EXTRA, COLUMN_DEFAULT, COLUMN_TYPE,COLUMN_COMMENT
                                                          FROM INFORMATION_SCHEMA.COLUMNS
                                                          WHERE TABLE_SCHEMA = '{0}' AND TABLE_NAME = '{1}' AND COLUMN_NAME = '{2}'",
                                                          columnSchema.Table.Database.Name, columnSchema.Table.Name, columnSchema.Name);
    
                    using (DbConnection connection = CreateConnection(connectionString))
                    {
                        connection.Open();
    
                        DbCommand command = connection.CreateCommand();
                        command.CommandText = commandText;
                        command.Connection = connection;
    
                        using (IDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection))
                        {
                            while (reader.Read())
                            {
                                string extra = reader.GetString(0).ToLower();
                                bool columndefaultisnull = reader.IsDBNull(1);
                                string columndefault = "";
                                if (!columndefaultisnull)
                                {
                                    columndefault = reader.GetString(1).ToUpper();
                                }
                                string columntype = reader.GetString(2).ToUpper();
                                string columncomment = reader.GetString(3);
    
                                bool isIdentity = (extra.IndexOf("auto_increment") > -1);
                                extendedProperties.Add(new ExtendedProperty(ExtendedPropertyNames.IsIdentity, isIdentity, columnSchema.DataType));
    
                                if (isIdentity)
                                {
                                    /*
                                    MySQL auto_increment doesn't work exactly like SQL Server's IDENTITY
                                    I believe that auto_increment is equivalent to IDENTITY(1, 1)
                                    However, auto_increment behaves differently from IDENTITY when used
                                    with multi-column primary keys.  See the MySQL Reference Manual for details.
                                    */
                                    extendedProperties.Add(new ExtendedProperty(ExtendedPropertyNames.IdentitySeed, 1, columnSchema.DataType));
                                    extendedProperties.Add(new ExtendedProperty(ExtendedPropertyNames.IdentityIncrement, 1, columnSchema.DataType));
                                }
    
                                extendedProperties.Add(new ExtendedProperty("CS_ColumnDefaultIsNull", columndefaultisnull, DbType.Boolean)); // Added for Backwards Compatibility.
                                extendedProperties.Add(new ExtendedProperty(ExtendedPropertyNames.DefaultValue, columndefault, DbType.String));
                                extendedProperties.Add(new ExtendedProperty("CS_ColumnDefault", columndefault, DbType.String)); // Added for Backwards Compatibility.
                                extendedProperties.Add(new ExtendedProperty(ExtendedPropertyNames.SystemType, columntype, DbType.String));
                                extendedProperties.Add(new ExtendedProperty("CS_ColumnType", columntype, DbType.String)); // Added for Backwards Compatibility.
                                extendedProperties.Add(new ExtendedProperty("CS_ColumnExtra", extra.ToUpper(), DbType.String));
                                extendedProperties.Add(new ExtendedProperty("CS_Description", columncomment, DbType.String));
                            }
    
                            if (!reader.IsClosed)
                                reader.Close();
                        }
    
                        if (connection.State != ConnectionState.Closed)
                            connection.Close();
                    }
                }
                if (schemaObject is TableSchema)
                {
                    TableSchema tableSchema = schemaObject as TableSchema;
                    string commandText = string.Format(@"SHOW CREATE TABLE `{0}`.`{1}`", tableSchema.Database.Name, tableSchema.Name);
    
                    using (DbConnection connection = CreateConnection(connectionString))
                    {
                        connection.Open();
    
                        DbCommand command = connection.CreateCommand();
                        command.CommandText = commandText;
                        command.Connection = connection;
    
                        using (IDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection))
                        {
                            while (reader.Read())
                            {
                                string createtable = reader.GetString(1);
                                //extendedProperties.Add(new ExtendedProperty("CS_CreateTableScript", createtable, DbType.String));
                                extendedProperties.Add(new ExtendedProperty("TS_Description", createtable, DbType.String));
                                int engineIndex = createtable.LastIndexOf("ENGINE");
                                int commentIndex = createtable.LastIndexOf("COMMENT=");
                                string tableDescription = reader.GetString(0);
                                if (commentIndex > engineIndex)
                                {
                                    tableDescription = createtable.Substring(commentIndex + 9).Replace("'", "");
                                }
                                extendedProperties.Add(new ExtendedProperty("CS_Description", tableDescription, DbType.String));
                            }
    
                            if (!reader.IsClosed)
                                reader.Close();
                        }
    
                        if (connection.State != ConnectionState.Closed)
                            connection.Close();
                    }
                }
    
                return extendedProperties.ToArray();
            }
  • 相关阅读:
    leetcode231 2的幂 leetcode342 4的幂 leetcode326 3的幂
    leetcode300. Longest Increasing Subsequence 最长递增子序列 、674. Longest Continuous Increasing Subsequence
    leetcode64. Minimum Path Sum
    leetcode 20 括号匹配
    算法题待做
    leetcode 121. Best Time to Buy and Sell Stock 、122.Best Time to Buy and Sell Stock II 、309. Best Time to Buy and Sell Stock with Cooldown 、714. Best Time to Buy and Sell Stock with Transaction Fee
    rand7生成rand10,rand1生成rand6,rand2生成rand5(包含了rand2生成rand3)
    依图
    leetcode 1.Two Sum 、167. Two Sum II
    从分类,排序,top-k多个方面对推荐算法稳定性的评价
  • 原文地址:https://www.cnblogs.com/xinzheng/p/5809766.html
Copyright © 2011-2022 走看看