コード例 #1
0
 public SingleTableGeneratedEventArgs(Common.DbConfigDatabaseInfo db, Common.DbDataTableInfo table, Config generatorConfig, string entityClassFullName, string entityClassPath, int tableCount, int tableNum)
 {
     this.db                  = db;
     this.table               = table;
     this.generatorConfig     = generatorConfig;
     this.entityClassFullName = entityClassFullName;
     this.entityClassPath     = entityClassPath;
     this.tableCount          = tableCount;
     this.tableNum            = tableNum;
 }
コード例 #2
0
 public static void Set(string key, Common.DbDataTableInfo value)
 {
     if (string.IsNullOrEmpty(key))
     {
         throw new Exception("key不能为空");
     }
     key = key.ToLower();
     if (CacheDic.ContainsKey(key))
     {
         CacheDic[key] = new StructCache {
             CacheTime = DateTime.Now, CacheData = value
         };
     }
     else
     {
         CacheDic.Add(key, new StructCache {
             CacheTime = DateTime.Now, CacheData = value
         });
     }
 }
コード例 #3
0
        public ZeroDbs.Common.DbDataTableInfo GetTable <T>() where T : class, new()
        {
            if (!IsMappingToDbKey <T>())
            {
                throw new Exception("类型" + typeof(T).FullName + "没有映射到" + DbConfigDatabaseInfo.dbKey + "上");
            }

            var key   = typeof(T).FullName;
            var value = Common.DbDataviewStructCache.Get(key);

            if (value != null)
            {
                return(value);
            }

            var cmd = this.GetDbCommand();

            try
            {
                var    dv = Common.DbMapping.GetDbConfigDataViewInfo <T>().Find(o => string.Equals(o.dbKey, DbConfigDatabaseInfo.dbKey, StringComparison.OrdinalIgnoreCase));
                string getTableOrViewSql = "select * from sqlite_master where name='" + dv.tableName + "' and type IN('table','view')";

                Common.DbDataTableInfo dbDataTableInfo = null;
                List <string>          IdentityNames   = new List <string>();
                cmd.CommandText = getTableOrViewSql;
                var reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    string type     = (reader["type"].ToString()).Trim();
                    string name     = (reader["name"].ToString()).Trim();
                    string tbl_name = (reader["tbl_name"].ToString()).Trim();
                    int    rootpage = Convert.ToInt32(reader["rootpage"].ToString());
                    string sql      = (reader["sql"].ToString()).Trim();

                    System.Text.RegularExpressions.Match temp = System.Text.RegularExpressions.Regex.Match(sql, @"(?<column>[^\{\}\(\),]\w+)\b[a-zA-Z0-9 ]{1,}\bAUTOINCREMENT\b", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
                    if (temp.Success)
                    {
                        IdentityNames.Add(temp.Groups["column"].Value);
                    }

                    dbDataTableInfo             = new Common.DbDataTableInfo();
                    dbDataTableInfo.DbName      = cmd.DbConnection.DataSource;//cmd.DbConnection.Database;
                    dbDataTableInfo.Name        = reader["name"].ToString();
                    dbDataTableInfo.IsView      = "view" == type;
                    dbDataTableInfo.Description = (dbDataTableInfo.IsView ? "VIEW:" : "TABLE:") + dbDataTableInfo.Name;
                    dbDataTableInfo.Colunms     = new List <Common.DbDataColumnInfo>();
                }
                reader.Close();
                reader.Dispose();

                if (dbDataTableInfo == null)
                {
                    throw new Exception("查询" + dv.tableName + "的表信息不成功");
                }

                string getColumnInfoSql = "PRAGMA table_info(" + dv.tableName + ")";
                cmd.IsCheckCommandText = false;
                cmd.CommandText        = getColumnInfoSql;
                reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    ZeroDbs.Common.DbDataColumnInfo column = new ZeroDbs.Common.DbDataColumnInfo();
                    column.Name          = reader["name"].ToString();
                    column.MaxLength     = 0;
                    column.Byte          = 0;
                    column.DecimalDigits = 0;
                    column.DefaultValue  = this.DbDataTypeMaping.GetDotNetDefaultValue(reader["dflt_value"].ToString(), reader["type"].ToString(), column.MaxLength);
                    column.Description   = reader["type"].ToString();
                    column.IsIdentity    = IdentityNames.Contains(column.Name);
                    column.IsNullable    = "0" == reader["notnull"].ToString();
                    column.IsPrimaryKey  = "0" != reader["pk"].ToString();
                    column.Type          = this.DbDataTypeMaping.GetDotNetTypeString(reader["Type"].ToString(), column.MaxLength);

                    dbDataTableInfo.Colunms.Add(column);
                }
                reader.Close();
                reader.Dispose();

                cmd.Dispose();

                Common.DbDataviewStructCache.Set(key, dbDataTableInfo);

                return(dbDataTableInfo);
            }
            catch (Exception ex)
            {
                cmd.Dispose();
                throw ex;
            }
        }
コード例 #4
0
        public List <ZeroDbs.Common.DbDataTableInfo> GetTables()
        {
            var cmd = this.GetDbCommand();

            try
            {
                var           dbName  = cmd.DbConnection.DataSource;//cmd.DbConnection.Database;
                List <string> sqlList = new List <string>();
                string        getAllTableAndViewSql = "select * from sqlite_master where type IN('table','view') order by type";

                List <ZeroDbs.Common.DbDataTableInfo> List = new List <ZeroDbs.Common.DbDataTableInfo>();
                List <string> IdentityNames = new List <string>();
                cmd.CommandText = getAllTableAndViewSql;
                var reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    string type     = (reader["type"].ToString()).Trim();
                    string name     = (reader["name"].ToString()).Trim();
                    string tbl_name = (reader["tbl_name"].ToString()).Trim();
                    int    rootpage = Convert.ToInt32(reader["rootpage"].ToString());
                    string sql      = (reader["sql"].ToString()).Trim();

                    if ("sqlite_sequence" == name)
                    {
                        continue;
                    }
                    ZeroDbs.Common.DbDataTableInfo m = new Common.DbDataTableInfo();

                    m.DbName      = dbName;
                    m.Name        = name;
                    m.IsView      = "view" == type;
                    m.Description = (m.IsView ? "VIEW:": "TABLE:") + m.Name;
                    m.Colunms     = new List <Common.DbDataColumnInfo>();
                    List.Add(m);
                    System.Text.RegularExpressions.Match temp = System.Text.RegularExpressions.Regex.Match(sql, @"(?<column>[^\{\}\(\),]\w+)\b[a-zA-Z0-9 ]{1,}\bAUTOINCREMENT\b", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
                    if (temp.Success)
                    {
                        IdentityNames.Add(temp.Groups["column"].Value);
                    }
                }
                reader.Close();
                reader.Dispose();

                cmd.IsCheckCommandText = false;

                foreach (ZeroDbs.Common.DbDataTableInfo m in List)
                {
                    string sql = "PRAGMA table_info(" + m.Name + ")";
                    cmd.CommandText = sql;
                    reader          = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        ZeroDbs.Common.DbDataColumnInfo column = new ZeroDbs.Common.DbDataColumnInfo();
                        column.Name          = reader["name"].ToString();
                        column.MaxLength     = 0;
                        column.Byte          = 0;
                        column.DecimalDigits = 0;
                        column.DefaultValue  = this.DbDataTypeMaping.GetDotNetDefaultValue(reader["dflt_value"].ToString(), reader["type"].ToString(), column.MaxLength);
                        column.Description   = reader["type"].ToString();
                        column.IsIdentity    = IdentityNames.Contains(column.Name);
                        column.IsNullable    = "0" == reader["notnull"].ToString();
                        column.IsPrimaryKey  = "0" != reader["pk"].ToString();
                        column.Type          = this.DbDataTypeMaping.GetDotNetTypeString(reader["Type"].ToString(), column.MaxLength);


                        m.Colunms.Add(column);
                    }
                    reader.Close();
                    reader.Dispose();
                }

                cmd.Dispose();

                return(List);
            }
            catch (Exception ex)
            {
                cmd.Dispose();
                throw ex;
            }
        }
コード例 #5
0
ファイル: Db.cs プロジェクト: 13039520/ZeroDbs
        public List <ZeroDbs.Common.DbDataTableInfo> GetTables()
        {
            var cmd = this.GetDbCommand();

            try
            {
                var           dbName  = cmd.DbConnection.Database;
                List <string> sqlList = new List <string>();
                string        getAllTableAndViewSql = "SELECT A.[id],A.[type],A.[name],"
                                                      + "(SELECT TOP 1 ISNULL(value, '') FROM sys.extended_properties AS E LEFT JOIN (SELECT object_id,name AS name2 FROM sys.views UNION SELECT object_id,name AS name2 FROM sys.tables) AS T1 ON T1.object_id=major_id WHERE E.minor_id=0 AND E.name='MS_Description' AND name2=A.[name])"
                                                      + "AS [description]"
                                                      + " FROM[sysobjects] AS A"
                                                      + " WHERE([type] = 'U' OR [type]= 'V')  ORDER BY [type],[name]";

                List <ZeroDbs.Common.DbDataTableInfo> List = new List <ZeroDbs.Common.DbDataTableInfo>();

                cmd.CommandText = getAllTableAndViewSql;
                var reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    ZeroDbs.Common.DbDataTableInfo m = new Common.DbDataTableInfo();
                    m.DbName = dbName;
                    m.Name   = reader["name"].ToString();
                    string type = (reader["type"].ToString()).Trim();
                    m.IsView = "V" == type;
                    string description = reader["description"] == DBNull.Value ? "" : reader["description"].ToString();
                    if (string.IsNullOrEmpty(description))
                    {
                        if (m.IsView)
                        {
                            description = "VIEW:" + m.Name;
                        }
                        else
                        {
                            description = "TABLE:" + m.Name;
                        }
                    }
                    m.Description = description;
                    m.Colunms     = new List <Common.DbDataColumnInfo>();
                    List.Add(m);
                }
                reader.Close();
                reader.Dispose();

                foreach (ZeroDbs.Common.DbDataTableInfo m in List)
                {
                    string sql = "SELECT C.Name AS [Name],T.Name AS [Type],"
                                 + "CONVERT(bit,C.IsNullable) AS [IsNullable],"
                                 + "CONVERT(bit,CASE WHEN EXISTS(SELECT 1 FROM sysobjects WHERE xtype='PK' AND parent_obj=C.Id AND Name IN("
                                 + "SELECT Name FROM sysindexes WHERE Indid IN("
                                 + "SELECT Indid FROM sysindexkeys WHERE Id=C.Id AND ColId=C.ColId))) THEN 1 ELSE 0 END)"
                                 + "AS [IsPrimaryKey],"
                                 + "CONVERT(bit,COLUMNPROPERTY(C.Id,C.Name,'IsIdentity')) AS [IsIdentity],"
                                 + "C.Length AS [Byte],"
                                 + "COLUMNPROPERTY(C.Id,C.Name,'PRECISION') AS [MaxLength],"
                                 + "ISNULL(COLUMNPROPERTY(C.Id,C.Name,'Scale'),0) AS [DecimalDigits],"
                                 + "ISNULL(CM.text,'') AS [DefaultValue],"
                                 + "ISNULL(ETP.value,'') AS [Description] "
                                 + "FROM syscolumns C "
                                 + "INNER JOIN systypes T ON C.xusertype = T.xusertype "
                                 + "LEFT JOIN sys.extended_properties ETP ON ETP.major_id=C.id AND ETP.minor_id=C.colid AND ETP.name='MS_Description' "
                                 + "LEFT JOIN syscomments CM ON C.cdefault=CM.id"
                                 + " WHERE C.Id=object_id('" + m.Name + "')";

                    cmd.CommandText = sql;
                    reader          = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        ZeroDbs.Common.DbDataColumnInfo column = new ZeroDbs.Common.DbDataColumnInfo();
                        column.MaxLength     = Convert.ToInt64(reader["MaxLength"]);
                        column.Byte          = Convert.ToInt64(reader["Byte"]);
                        column.DecimalDigits = Convert.ToInt32(reader["DecimalDigits"]);
                        column.DefaultValue  = this.DbDataTypeMaping.GetDotNetDefaultValue(reader["DefaultValue"].ToString(), reader["Type"].ToString(), column.MaxLength);
                        column.Description   = reader["Description"].ToString();
                        column.IsIdentity    = Convert.ToBoolean(reader["IsIdentity"]);
                        column.IsNullable    = Convert.ToBoolean(reader["IsNullable"]);
                        column.IsPrimaryKey  = Convert.ToBoolean(reader["IsPrimaryKey"]);
                        column.Type          = this.DbDataTypeMaping.GetDotNetTypeString(reader["Type"].ToString(), column.MaxLength);
                        column.Name          = reader["Name"].ToString();

                        m.Colunms.Add(column);
                    }
                    reader.Close();
                    reader.Dispose();
                }

                cmd.Dispose();

                return(List);
            }
            catch (Exception ex)
            {
                cmd.Dispose();
                throw ex;
            }
        }
コード例 #6
0
ファイル: Db.cs プロジェクト: 13039520/ZeroDbs
        public ZeroDbs.Common.DbDataTableInfo GetTable <T>() where T : class, new()
        {
            if (!IsMappingToDbKey <T>())
            {
                throw new Exception("类型" + typeof(T).FullName + "没有映射到" + DbConfigDatabaseInfo.dbKey + "上");
            }

            var key   = typeof(T).FullName;
            var value = Common.DbDataviewStructCache.Get(key);

            if (value != null)
            {
                return(value);
            }

            var cmd = this.GetDbCommand();

            try
            {
                var    dv = Common.DbMapping.GetDbConfigDataViewInfo <T>().Find(o => string.Equals(o.dbKey, DbConfigDatabaseInfo.dbKey, StringComparison.OrdinalIgnoreCase));
                string getTableOrViewSql = "SELECT A.[id],A.[type],A.[name],"
                                           + "(SELECT TOP 1 ISNULL(value, '') FROM sys.extended_properties AS E LEFT JOIN (SELECT object_id,name AS name2 FROM sys.views UNION SELECT object_id,name AS name2 FROM sys.tables) AS T1 ON T1.object_id=major_id WHERE E.minor_id=0 AND E.name='MS_Description' AND name2=A.[name])"
                                           + "AS [description]"
                                           + " FROM [sysobjects] AS A"
                                           + " WHERE [name]='" + dv.tableName + "' AND ([type] = 'U' OR [type]= 'V')  ORDER BY [type],[name]";

                Common.DbDataTableInfo dbDataTableInfo = null;

                cmd.CommandText = getTableOrViewSql;
                var reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    dbDataTableInfo        = new Common.DbDataTableInfo();
                    dbDataTableInfo.DbName = cmd.DbConnection.Database;
                    dbDataTableInfo.Name   = reader["name"].ToString();
                    string type = (reader["type"].ToString()).Trim();
                    dbDataTableInfo.IsView = "V" == type;
                    string description = reader["description"] == DBNull.Value ? "" : reader["description"].ToString();
                    if (string.IsNullOrEmpty(description))
                    {
                        if (dbDataTableInfo.IsView)
                        {
                            description = "VIEW:" + dbDataTableInfo.Name;
                        }
                        else
                        {
                            description = "TABLE:" + dbDataTableInfo.Name;
                        }
                    }
                    dbDataTableInfo.Description = description;
                    dbDataTableInfo.Colunms     = new List <Common.DbDataColumnInfo>();
                }
                reader.Close();
                reader.Dispose();

                if (dbDataTableInfo == null)
                {
                    throw new Exception("查询" + dv.tableName + "的表信息不成功");
                }

                string getColumnInfoSql = "SELECT C.Name AS [Name],T.Name AS [Type],"
                                          + "CONVERT(bit,C.IsNullable) AS [IsNullable],"
                                          + "CONVERT(bit,CASE WHEN EXISTS(SELECT 1 FROM sysobjects WHERE xtype='PK' AND parent_obj=C.Id AND Name IN("
                                          + "SELECT Name FROM sysindexes WHERE Indid IN("
                                          + "SELECT Indid FROM sysindexkeys WHERE Id=C.Id AND ColId=C.ColId))) THEN 1 ELSE 0 END)"
                                          + "AS [IsPrimaryKey],"
                                          + "CONVERT(bit,COLUMNPROPERTY(C.Id,C.Name,'IsIdentity')) AS [IsIdentity],"
                                          + "C.Length AS [Byte],"
                                          + "COLUMNPROPERTY(C.Id,C.Name,'PRECISION') AS [MaxLength],"
                                          + "ISNULL(COLUMNPROPERTY(C.Id,C.Name,'Scale'),0) AS [DecimalDigits],"
                                          + "ISNULL(CM.text,'') AS [DefaultValue],"
                                          + "ISNULL(ETP.value,'') AS [Description] "
                                          + "FROM syscolumns C "
                                          + "INNER JOIN systypes T ON C.xusertype = T.xusertype "
                                          + "LEFT JOIN sys.extended_properties ETP ON ETP.major_id=C.id AND ETP.minor_id=C.colid AND ETP.name='MS_Description' "
                                          + "LEFT JOIN syscomments CM ON C.cdefault=CM.id"
                                          + " WHERE C.Id=object_id('" + dv.tableName + "')";

                List <string> sqlList2 = new List <string>();
                sqlList2.Add(getColumnInfoSql);

                cmd.CommandText = getColumnInfoSql;
                reader          = cmd.ExecuteReader();
                while (reader.Read())
                {
                    ZeroDbs.Common.DbDataColumnInfo column = new ZeroDbs.Common.DbDataColumnInfo();
                    column.MaxLength     = Convert.ToInt64(reader["MaxLength"]);
                    column.Byte          = Convert.ToInt64(reader["Byte"]);
                    column.DecimalDigits = Convert.ToInt32(reader["DecimalDigits"]);
                    column.DefaultValue  = this.DbDataTypeMaping.GetDotNetDefaultValue(reader["DefaultValue"].ToString(), reader["Type"].ToString(), column.MaxLength);
                    column.Description   = reader["Description"].ToString();
                    column.IsIdentity    = Convert.ToBoolean(reader["IsIdentity"]);
                    column.IsNullable    = Convert.ToBoolean(reader["IsNullable"]);
                    column.IsPrimaryKey  = Convert.ToBoolean(reader["IsPrimaryKey"]);
                    column.Type          = this.DbDataTypeMaping.GetDotNetTypeString(reader["Type"].ToString(), column.MaxLength);
                    column.Name          = reader["Name"].ToString();

                    dbDataTableInfo.Colunms.Add(column);
                }
                reader.Close();
                reader.Dispose();

                cmd.Dispose();

                Common.DbDataviewStructCache.Set(key, dbDataTableInfo);

                return(dbDataTableInfo);
            }
            catch (Exception ex)
            {
                cmd.Dispose();
                throw ex;
            }
        }
コード例 #7
0
ファイル: Db.cs プロジェクト: 13039520/ZeroDbs
        public List <ZeroDbs.Common.DbDataTableInfo> GetTables()
        {
            var cmd = this.GetDbCommand();

            try
            {
                var    dbName = cmd.DbConnection.Database;
                string getAllTableAndViewSql = "SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA='" + dbName + "'";

                List <ZeroDbs.Common.DbDataTableInfo> List = new List <ZeroDbs.Common.DbDataTableInfo>();

                cmd.CommandText = getAllTableAndViewSql;
                var reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    ZeroDbs.Common.DbDataTableInfo m = new Common.DbDataTableInfo();
                    bool   isTable     = (reader["TABLE_TYPE"].ToString() != "VIEW");
                    string tableName   = reader["TABLE_NAME"].ToString();
                    string description = reader["TABLE_COMMENT"].ToString();
                    if (description != "")
                    {
                        if (isTable)
                        {
                            if (description == "TABLE")
                            {
                                description = "TABLE:" + tableName;
                            }
                        }
                        else
                        {
                            if (description == "VIEW")
                            {
                                description = "VIEW:" + tableName;
                            }
                        }
                    }
                    m.Name        = tableName;
                    m.IsView      = isTable ? false : true;
                    m.Description = description;
                    m.DbName      = dbName;
                    m.Colunms     = new List <Common.DbDataColumnInfo>();
                    List.Add(m);
                }
                reader.Close();
                reader.Dispose();

                foreach (ZeroDbs.Common.DbDataTableInfo m in List)
                {
                    string sql = "SELECT * FROM information_schema.COLUMNS WHERE table_schema='" + m.DbName + "' AND table_name='" + m.Name + "'";

                    cmd.CommandText = sql;
                    reader          = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        ZeroDbs.Common.DbDataColumnInfo column = new ZeroDbs.Common.DbDataColumnInfo();

                        column.MaxLength     = reader["CHARACTER_MAXIMUM_LENGTH"].ToString().Length > 0 ? Convert.ToInt64(reader["CHARACTER_MAXIMUM_LENGTH"]) : -1;
                        column.Byte          = reader["CHARACTER_OCTET_LENGTH"].ToString().Length > 0 ? Convert.ToInt64(reader["CHARACTER_OCTET_LENGTH"]) : -1;
                        column.DecimalDigits = reader["NUMERIC_SCALE"].ToString().Length > 0 ? Convert.ToInt32(reader["NUMERIC_SCALE"]) : -1;
                        column.DefaultValue  = this.DbDataTypeMaping.GetDotNetDefaultValue(reader["COLUMN_DEFAULT"].ToString(), reader["DATA_TYPE"].ToString(), column.MaxLength);
                        column.Description   = reader["COLUMN_COMMENT"].ToString();
                        column.IsIdentity    = reader["EXTRA"].ToString().ToLower() == "auto_increment";
                        column.IsNullable    = reader["IS_NULLABLE"].ToString().ToLower() == "yes";
                        column.IsPrimaryKey  = reader["COLUMN_KEY"].ToString().ToUpper() == "PRI";//COLUMN_KEY
                        column.Name          = reader["COLUMN_NAME"].ToString();
                        column.Type          = this.DbDataTypeMaping.GetDotNetTypeString(reader["DATA_TYPE"].ToString(), column.MaxLength);

                        m.Colunms.Add(column);
                    }
                    reader.Close();
                    reader.Dispose();
                }

                cmd.Dispose();

                return(List);
            }
            catch (Exception ex)
            {
                cmd.Dispose();
                throw ex;
            }
        }
コード例 #8
0
ファイル: Db.cs プロジェクト: 13039520/ZeroDbs
        public ZeroDbs.Common.DbDataTableInfo GetTable <T>() where T : class, new()
        {
            if (!IsMappingToDbKey <T>())
            {
                throw new Exception("类型" + typeof(T).FullName + "没有映射到" + DbConfigDatabaseInfo.dbKey + "上");
            }

            var key   = typeof(T).FullName;
            var value = Common.DbDataviewStructCache.Get(key);

            if (value != null)
            {
                return(value);
            }

            var cmd = this.GetDbCommand();

            try
            {
                var    dbName            = cmd.DbConnection.Database;
                var    dv                = Common.DbMapping.GetDbConfigDataViewInfo <T>().Find(o => string.Equals(o.dbKey, DbConfigDatabaseInfo.dbKey, StringComparison.OrdinalIgnoreCase));
                string getTableOrViewSql = "SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA='" + dbName + "' AND TABLE_NAME='" + dv.tableName + "'";

                Common.DbDataTableInfo dbDataTableInfo = null;

                cmd.CommandText = getTableOrViewSql;
                var reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    dbDataTableInfo = new Common.DbDataTableInfo();
                    ZeroDbs.Common.DbDataTableInfo m = new Common.DbDataTableInfo();
                    bool   isTable     = (reader["TABLE_TYPE"].ToString() != "VIEW");
                    string tableName   = reader["TABLE_NAME"].ToString();
                    string description = reader["TABLE_COMMENT"].ToString();
                    if (description != "")
                    {
                        if (isTable)
                        {
                            if (description == "TABLE")
                            {
                                description = "TABLE:" + tableName;
                            }
                        }
                        else
                        {
                            if (description == "VIEW")
                            {
                                description = "VIEW:" + tableName;
                            }
                        }
                    }
                    dbDataTableInfo.Name        = tableName;
                    dbDataTableInfo.IsView      = isTable ? false : true;
                    dbDataTableInfo.Description = description;
                    dbDataTableInfo.DbName      = dbName;
                    dbDataTableInfo.Colunms     = new List <Common.DbDataColumnInfo>();
                }
                reader.Close();
                reader.Dispose();

                if (dbDataTableInfo == null)
                {
                    throw new Exception("查询" + dv.tableName + "的表信息不成功");
                }

                string getColumnInfoSql = "SELECT * FROM information_schema.COLUMNS WHERE table_schema='" + dbDataTableInfo.DbName + "' AND table_name='" + dbDataTableInfo.Name + "'";;

                cmd.CommandText = getColumnInfoSql;
                reader          = cmd.ExecuteReader();
                while (reader.Read())
                {
                    ZeroDbs.Common.DbDataColumnInfo column = new ZeroDbs.Common.DbDataColumnInfo();

                    column.MaxLength     = reader["CHARACTER_MAXIMUM_LENGTH"].ToString().Length > 0 ? Convert.ToInt64(reader["CHARACTER_MAXIMUM_LENGTH"]) : -1;
                    column.Byte          = reader["CHARACTER_OCTET_LENGTH"].ToString().Length > 0 ? Convert.ToInt64(reader["CHARACTER_OCTET_LENGTH"]) : -1;
                    column.DecimalDigits = reader["NUMERIC_SCALE"].ToString().Length > 0 ? Convert.ToInt32(reader["NUMERIC_SCALE"]) : -1;
                    column.DefaultValue  = this.DbDataTypeMaping.GetDotNetDefaultValue(reader["COLUMN_DEFAULT"].ToString(), reader["DATA_TYPE"].ToString(), column.MaxLength);
                    column.Description   = reader["COLUMN_COMMENT"].ToString();
                    column.IsIdentity    = reader["EXTRA"].ToString().ToLower() == "auto_increment";
                    column.IsNullable    = reader["IS_NULLABLE"].ToString().ToLower() == "yes";
                    column.IsPrimaryKey  = reader["COLUMN_KEY"].ToString().ToUpper() == "PRI";//COLUMN_KEY
                    column.Name          = reader["COLUMN_NAME"].ToString();
                    column.Type          = this.DbDataTypeMaping.GetDotNetTypeString(reader["DATA_TYPE"].ToString(), column.MaxLength);

                    dbDataTableInfo.Colunms.Add(column);
                }
                reader.Close();
                reader.Dispose();

                cmd.Dispose();

                Common.DbDataviewStructCache.Set(key, dbDataTableInfo);

                return(dbDataTableInfo);
            }
            catch (Exception ex)
            {
                cmd.Dispose();
                throw ex;
            }
        }