获得数据库对象信息

//获得数据表
            switch(DBConnForm.DatabaseType)
            {
                case DBConnForm.DatabaseTypeTag.SQLServer:
                    tables = DBCommand.QueryStrs("select name from sysobjects where xtype='U' order by name");
                    break;
                case DBConnForm.DatabaseTypeTag.MySQL:
                    tables = ValuesToStrings(DBCommand.QueryValues_MySQL("SELECT TABLE_NAME FROM information_schema.`TABLES` WHERE TABLE_SCHEMA='" + database + "' AND TABLE_TYPE='base table' ORDER BY TABLE_NAME;"));
                    break;
            }
//获取数据表字段信息
public class ColumnInfo
        {
            public string DataType { get; set; }
            public string ColumnName { get; set; }
            public bool IsNullable { get; set; }
            public bool Auto_Increment { get; set; }
            //COLUMN_COMMENT
            public string Comment { get; set; }
            public bool IsPrimaryKey { get; set; }
        }

        public interface IDbHelper
        {
            List<ColumnInfo> GetDBColumns(string DatabaseName, string TableName);
            string GetTableComment(string DatabaseName, string TableName);

            string GetRepositoryDBBaseExtension();
        }

        public class MySQLDbHelper : IDbHelper
        {
            public List<ColumnInfo> GetDBColumns(string DatabaseName, string TableName)
            {
                var sql= string.Format(@"SELECT COLUMN_NAME,IS_NULLABLE,DATA_TYPE,COLUMN_COMMENT,COLUMN_KEY,EXTRA FROM information_schema.`COLUMNS` 
                                            WHERE TABLE_SCHEMA='{0}' AND TABLE_NAME='{1}' ORDER BY ORDINAL_POSITION;", DatabaseName,
                                            TableName);
                List<ColumnInfo> Columns = new List<ColumnInfo>();
                DBComm.DBCommand.QuerySomeMySQL(sql, dr =>
                {
                    while (dr.Read())
                    {
                        var col = new ColumnInfo()
                        {
                            ColumnName = Convert.ToString(dr.GetValue(0)),
                            IsNullable = Convert.ToString(dr.GetValue(1)).ToLower() == "yes",
                            DataType = Convert.ToString(dr.GetValue(2)),
                            Comment = Convert.ToString(dr.GetValue(3)),
                            IsPrimaryKey = Convert.ToString(dr.GetValue(4)).ToUpper() == "PRI",
                            Auto_Increment= Convert.ToString(dr.GetValue(5)).ToLower() == "auto_increment",
                        };
                        Columns.Add(col);
                        Columns[Columns.Count - 1].DataType = Common.ColumnInfo.DBTypeToSystemType(col.DataType, col.IsNullable);
                    }
                });
                return Columns;
            }

            public string GetRepositoryDBBaseExtension()
            {
                return "RepositoryMySQLBaseExtension";
            }

            public string GetTableComment(string DatabaseName, string TableName)
            {
                return Convert.ToString(DBComm.DBCommand.QueryValue_MySQL(string.Format(@"select TABLE_COMMENT FROM information_schema.`TABLES` 
                                                        WHERE TABLE_SCHEMA='{0}' AND TABLE_NAME='{1}';", DatabaseName, TableName)));
            }
        }

        public class SQLServerDBHelper : IDbHelper
        {
            public List<ColumnInfo> GetDBColumns(string DatabaseName, string TableName)
            {
                var sql = @" select
                                                 col.name as ColumnName, 
                                                 col.isnullable as IsNullable, 
                                                 tp.name as DataType, 
                                                 ep.value as Descript, 
                                                 ( 
                                                   select count(*) from sys.sysobjects 
                                                   where parent_obj=obj.id 
                                                   and name=( 
                                                       select top 1 name from sys.sysindexes ind 
                                                       inner join sys.sysindexkeys indkey 
                                                       on ind.indid=indkey.indid 
                                                       and indkey.colid=col.colid 
                                                       and indkey.id=obj.id 
                                                       where ind.id=obj.id 
                                                       and ind.name like 'PK_%' 
                                                   ) 
                                                 ) as IsPrimaryKey 
                                                ,COLUMNPROPERTY(col.id,col.name,'IsIdentity') as IsIdentity 
                                                 from sys.sysobjects obj 
                                                 inner join sys.syscolumns col 
                                                 on obj.id = col.id 
                                                 left join sys.systypes tp 
                                                 on col.xtype=tp.xusertype 
                                                 left join sys.extended_properties ep 
                                                 on ep.major_id=obj.id 
                                                 and ep.minor_id=col.colid 
                                                 and ep.name='MS_Description'" +
                                                                 string.Format(" where obj.name=\'{0}\'", TableName);
                List<ColumnInfo> Columns = new List<ColumnInfo>();
                DBComm.DBCommand.QuerySome(sql, sr =>
                {
                    while(sr.Read())
                    {
                        ColumnInfo cinfo = new ColumnInfo()
                        {
                            ColumnName = sr.GetString(0),
                            IsNullable = Convert.ToInt32(sr.GetValue(1)) == 0,
                            DataType = sr.GetString(2),
                            Comment = Convert.ToString(sr.GetValue(3)),
                            IsPrimaryKey = Convert.ToInt32(sr.GetValue(4)) == 0,
                            Auto_Increment = Convert.ToInt32(sr.GetValue(5)) == 1
                        };
                        Columns.Add(cinfo);
                        Columns[Columns.Count - 1].DataType = Common.ColumnInfo.DBTypeToSystemType(cinfo.DataType, cinfo.IsNullable);
                    }
                    return null;
                });
                return Columns;
            }

            public string GetRepositoryDBBaseExtension()
            {
                return "RepositoryMSSQLBaseExtension";
            }

            public string GetTableComment(string DatabaseName, string TableName)
            {
                return DBComm.DBCommand.QueryStr(@"select  
                                          isnull(g.[value],'') AS 说明
                                        from 
                                          sys.tables a left join sys.extended_properties g 
                                          on (a.object_id = g.major_id AND g.minor_id = 0) where a.name='" + TableName + "'  order by a.name");
            }
        }

        public static class DBHelperFactory
        {
            public  static IDbHelper GetInstance(DBConnForm.DatabaseTypeTag tag)
            {
                IDbHelper dbhelper = null;
                switch (DBConnForm.DatabaseType)
                {
                    case DBConnForm.DatabaseTypeTag.MySQL:
                        dbhelper = new MySQLDbHelper();
                        break;
                    case DBConnForm.DatabaseTypeTag.SQLServer:
                        dbhelper = new SQLServerDBHelper();
                        break;
                }
                return dbhelper;
            }
        }
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值