/// <summary>
        /// 往表中填充字段信息
        /// </summary>
        /// <param name="connectionString">数据库连接字符串</param>
        /// <param name="tableInfo">需要填充的表信息对象</param>
        public void FillColumnInfo(string connectionString, TableInfo tableInfo)
        {
            OleDbConnection oleDbConn = new OleDbConnection(connectionString);

            try
            {
                oleDbConn.Open();
            }
            catch (Exception ex)
            {
                throw new ResponseException(GenCodeToolResource.Error_OpenDB, ex);
            }

            StringBuilder colQuery = new StringBuilder();
            colQuery.AppendLine(@"SELECT ");
            colQuery.AppendLine(@"  t.table_name, ");
            colQuery.AppendLine(@"  t.column_name, ");
            colQuery.AppendLine(@"  t.data_type, ");
            colQuery.AppendLine(@"  t.data_length, ");
            colQuery.AppendLine(@"  t.nullable, ");
            colQuery.AppendLine(@"  t.column_id, ");
            colQuery.AppendLine(@"  c.comments, ");
            colQuery.AppendLine(@"  t.data_precision, ");
            colQuery.AppendLine(@"  t.data_scale, ");
            colQuery.AppendLine(@"  t.data_default, ");
            colQuery.AppendLine(@"  (SELECT CASE WHEN n.column_name is not null AND n.constraint_type = 'U' THEN 'true' ELSE 'false' END FROM DUAL) isunique, ");
            colQuery.AppendLine(@"  (SELECT CASE WHEN n.column_name is not null AND n.constraint_type = 'P' THEN 'true' ELSE 'false' END FROM DUAL) ispk, ");
            colQuery.AppendLine(@"  (SELECT CASE WHEN n.column_name is not null AND n.constraint_type = 'R' THEN 'true' ELSE 'false' END FROM DUAL) isfk, ");
            colQuery.AppendLine(@"  n.fk_name, ");
            colQuery.AppendLine(@"  n.fk_col_name, ");
            colQuery.AppendLine(@"  n.fk_table_name ");
            colQuery.AppendLine(@"FROM ");
            colQuery.AppendLine(@"  user_tab_cols t ");
            colQuery.AppendLine(@"LEFT JOIN  ");
            colQuery.AppendLine(@"  user_col_comments c ON (c.table_name=t.table_name AND c.column_name=t.column_name) ");
            colQuery.AppendLine(@"LEFT JOIN ");
            colQuery.AppendLine(@"  (SELECT ");
            colQuery.AppendLine(@"     col1.column_name, ");
            colQuery.AppendLine(@"     col1.table_name, ");
            colQuery.AppendLine(@"     con1.constraint_type, ");
            colQuery.AppendLine(@"     con1.constraint_name, ");
            colQuery.AppendLine(@"     con1.r_constraint_name AS fk_name, ");
            colQuery.AppendLine(@"     col2.column_name AS fk_col_name, ");
            colQuery.AppendLine(@"     col2.table_name AS fk_table_name ");
            colQuery.AppendLine(@"   FROM ");
            colQuery.AppendLine(@"     user_cons_columns col1 ");
            colQuery.AppendLine(@"   LEFT JOIN ");
            colQuery.AppendLine(@"     user_constraints con1 ON(col1.table_name = con1.table_name AND col1.constraint_name = con1.constraint_name) ");
            colQuery.AppendLine(@"   LEFT JOIN ");
            colQuery.AppendLine(@"     user_cons_columns col2 ON(col2.constraint_name = con1.r_constraint_name) ");
            colQuery.AppendLine(@"   LEFT JOIN ");
            colQuery.AppendLine(@"     user_constraints con2 ON(col2.table_name = con2.table_name AND con2.constraint_name = con1.r_constraint_name) ");
            colQuery.AppendLine(@"   WHERE ");
            colQuery.AppendLine(@"        ");
            colQuery.AppendLine(@"     AND ");
            colQuery.AppendLine(@"       con1.constraint_type != 'C') n ON (n.column_name = t.column_name and LOWER(col1.table_name)=LOWER(t.table_name)) ");
            colQuery.AppendLine(@"WHERE ");
            colQuery.AppendLine(@"    LOWER(t.table_name)='" + tableInfo.Name.ToLower() + @"' ");
            colQuery.AppendLine(@"  AND ");
            colQuery.AppendLine(@"    t.hidden_column='NO' ");
            colQuery.AppendLine(@"ORDER BY ");
            colQuery.AppendLine(@"  t.column_id ");

            OleDbCommand command = new OleDbCommand(colQuery.ToString(), oleDbConn);
            OleDbDataReader dataReader = null;
            ColumnInfo colInfo = null;
            int tmpInt = 0;

            try
            {
                dataReader = command.ExecuteReader();

                while (dataReader.Read())
                {
                    colInfo = new ColumnInfo();
                    colInfo.Name = dataReader[1].ToString();
                    colInfo.SqlType = dataReader[2].ToString().ToLower();
                    colInfo.MaxLength = !int.TryParse(dataReader[3].ToString(), out tmpInt) ? 0 : tmpInt;
                    colInfo.IsNullable = "Y".Equals(dataReader[4].ToString()) ? true : false;
                    colInfo.ColId = int.Parse(dataReader[5].ToString()); 
                    colInfo.Comment = dataReader[6].ToString();
                    colInfo.Precision = !int.TryParse(dataReader[7].ToString(), out tmpInt) ? 0 : tmpInt;
                    colInfo.Scale = !int.TryParse(dataReader[8].ToString(), out tmpInt) ? 0 : tmpInt;
                    colInfo.DefaultValue = dataReader[9].ToString();
                    colInfo.IsUnique = bool.Parse(dataReader[10].ToString());
                    colInfo.IsPK = bool.Parse(dataReader[11].ToString());
                    colInfo.IsFK = bool.Parse(dataReader[12].ToString());

                    if (colInfo.IsFK)
                    {
                        colInfo.FKName = dataReader[13].ToString();
                        colInfo.FKColumnName = dataReader[14].ToString();
                        colInfo.FKTableName = dataReader[15].ToString();
                    }

                    colInfo.DbType = ToDbType(colInfo.SqlType, colInfo.Precision, colInfo.Scale);
                    colInfo.DalType = ToDalType(colInfo.SqlType, colInfo.Precision, colInfo.Scale);
                    tableInfo.AddColumn(colInfo);
                }
            }
            catch (Exception ex)
            {
                throw new ResponseException(GenCodeToolResource.Error_GetColumn, ex);
            }
            finally
            {
                dataReader.Close();
                oleDbConn.Close();
            }
        }
        /// <summary>
        /// 往表中填充字段信息
        /// </summary>
        /// <param name="connectionString">数据库连接字符串</param>
        /// <param name="tableInfo">需要填充的表信息对象</param>
        public void FillColumnInfo(string connectionString, TableInfo tableInfo)
        {
            MySqlConnection dbConn = new MySqlConnection(connectionString);
            dbConn.Open();
            string currentSchema = dbConn.Database;
            dbConn.Close();
            dbConn.Dispose();
            dbConn = null;

            StringBuilder colQuery = new StringBuilder();
            colQuery.AppendLine(@"SELECT ");
            colQuery.AppendLine(@"    C.*, ");
            colQuery.AppendLine(@"    PKTBL.PK, ");
            colQuery.AppendLine(@"    UKTBL.UK, ");
            colQuery.AppendLine(@"    FKTBL.FK, ");
            colQuery.AppendLine(@"    FKTBL.FK_NAME, ");
            colQuery.AppendLine(@"    FKTBL.REF_SCHEMA, ");
            colQuery.AppendLine(@"    FKTBL.REF_TABLE_NAME, ");
            colQuery.AppendLine(@"    FKTBL.REF_COLUMN_NAME ");
            colQuery.AppendLine(@"FROM ");
            colQuery.AppendLine(@"    `information_schema`.`columns` AS C ");
            colQuery.AppendLine(@"LEFT JOIN ");
            colQuery.AppendLine(@"    (SELECT ");
            colQuery.AppendLine(@"        k.`table_schema`, ");
            colQuery.AppendLine(@"        k.`table_name`, ");
            colQuery.AppendLine(@"        k.`column_name`, ");
            colQuery.AppendLine(@"        tc.constraint_name, ");
            colQuery.AppendLine(@"        tc.constraint_type AS PK ");
            colQuery.AppendLine(@"    FROM ");
            colQuery.AppendLine(@"        `information_schema`.KEY_COLUMN_USAGE AS k ");
            colQuery.AppendLine(@"    INNER JOIN `information_schema`.TABLE_CONSTRAINTS AS tc ON k.CONSTRAINT_NAME = tc.CONSTRAINT_NAME ");
            colQuery.AppendLine(@"                                                           AND k.`table_name` = tc.`table_name` ");
            colQuery.AppendLine(@"                                                           AND k.table_schema = tc.table_schema ");
            colQuery.AppendLine(@"                                                           AND tc.CONSTRAINT_TYPE = 'PRIMARY KEY' ");
            colQuery.AppendLine(@"    ) PKTBL ON PKTBL.`table_schema` = C.`table_schema` ");
            colQuery.AppendLine(@"            AND PKTBL.`table_name` = C.`table_name` ");
            colQuery.AppendLine(@"            AND PKTBL.`column_name` = C.`column_name` ");
            colQuery.AppendLine(@"LEFT JOIN ");
            colQuery.AppendLine(@"    (SELECT DISTINCT ");
            colQuery.AppendLine(@"        k.`table_schema`, ");
            colQuery.AppendLine(@"        k.`table_name`, ");
            colQuery.AppendLine(@"        k.`column_name`, ");
            colQuery.AppendLine(@"        tc.constraint_type AS UK ");
            colQuery.AppendLine(@"    FROM");
            colQuery.AppendLine(@"        `information_schema`.KEY_COLUMN_USAGE AS k ");
            colQuery.AppendLine(@"    INNER JOIN `information_schema`.TABLE_CONSTRAINTS AS tc ON k.CONSTRAINT_NAME = tc.CONSTRAINT_NAME ");
            colQuery.AppendLine(@"                                                           AND k.`table_name` = tc.`table_name` ");
            colQuery.AppendLine(@"                                                           AND k.table_schema = tc.table_schema ");
            colQuery.AppendLine(@"                                                           AND tc.CONSTRAINT_TYPE = 'UNIQUE' ");
            colQuery.AppendLine(@"    ) UKTBL ON UKTBL.`table_schema` = C.`table_schema` ");
            colQuery.AppendLine(@"            AND UKTBL.`table_name` = C.`table_name` ");
            colQuery.AppendLine(@"            AND UKTBL.`column_name` = C.`column_name` ");
            colQuery.AppendLine(@"LEFT JOIN ");
            colQuery.AppendLine(@"    (SELECT ");
            colQuery.AppendLine(@"        k.`table_schema`, ");
            colQuery.AppendLine(@"        k.`table_name`,");
            colQuery.AppendLine(@"        k.`column_name`, ");
            colQuery.AppendLine(@"        tc.constraint_type AS FK, ");
            colQuery.AppendLine(@"        tc.constraint_name AS FK_NAME, ");
            colQuery.AppendLine(@"        k.referenced_table_schema AS REF_SCHEMA, ");
            colQuery.AppendLine(@"        k.referenced_table_name AS REF_TABLE_NAME, ");
            colQuery.AppendLine(@"        k.referenced_column_name AS REF_COLUMN_NAME ");
            colQuery.AppendLine(@"    FROM");
            colQuery.AppendLine(@"        `information_schema`.KEY_COLUMN_USAGE AS k ");
            colQuery.AppendLine(@"    INNER JOIN `information_schema`.TABLE_CONSTRAINTS AS tc ON k.CONSTRAINT_NAME = tc.CONSTRAINT_NAME ");
            colQuery.AppendLine(@"                                                           AND k.`table_name` = tc.`table_name` ");
            colQuery.AppendLine(@"                                                           AND k.table_schema = tc.table_schema ");
            colQuery.AppendLine(@"                                                           AND tc.CONSTRAINT_TYPE = 'FOREIGN KEY' ");
            colQuery.AppendLine(@"    ) FKTBL ON FKTBL.`table_schema` = C.`table_schema` ");
            colQuery.AppendLine(@"            AND FKTBL.`table_name` = C.`table_name` ");
            colQuery.AppendLine(@"            AND FKTBL.`column_name` = C.`column_name` ");
            colQuery.AppendLine(@"WHERE");
            colQuery.AppendLine(@"    C.TABLE_SCHEMA = @TableSchema ");
            colQuery.AppendLine(@"AND ");
            colQuery.AppendLine(@"    C.TABLE_NAME = @TableName ");
            colQuery.AppendLine(@"ORDER BY ");
            colQuery.AppendLine(@"    C.ORDINAL_POSITION ");

            MySqlParameter[] paramCollection = new MySqlParameter[2];
            paramCollection[0] = new MySqlParameter("TableSchema", MySqlDbType.String);
            paramCollection[1] = new MySqlParameter("TableName", MySqlDbType.String);

            paramCollection[0].Value = currentSchema;
            paramCollection[1].Value = tableInfo.Name;
            
            ColumnInfo colInfo = null;
            int tmpInt = 0;

            try
            {
                DataSet colDs = MySqlHelper.ExecuteDataset(connectionString, colQuery.ToString(), paramCollection);

                if (colDs != null && colDs.Tables.Count > 0 && colDs.Tables[0].Rows.Count > 0)
                {
                    DataTable colTbl = colDs.Tables[0];

                    foreach(DataRow dRow in colTbl.Rows)
                    {
                        colInfo = new ColumnInfo();
                        colInfo.Name = dRow["COLUMN_NAME"].ToString();
                        colInfo.SqlType = dRow["DATA_TYPE"].ToString().ToLower();
                        colInfo.MaxLength = !int.TryParse(dRow["CHARACTER_MAXIMUM_LENGTH"].ToString(), out tmpInt) ? 0 : tmpInt;
                        colInfo.IsNullable = "YES".Equals(dRow["IS_NULLABLE"].ToString()) ? true : false;
                        colInfo.ColId = Convert.ToInt32(dRow["ORDINAL_POSITION"]);
                        colInfo.Comment = dRow["COLUMN_COMMENT"].ToString();
                        colInfo.Precision = !int.TryParse(dRow["NUMERIC_PRECISION"].ToString(), out tmpInt) ? 0 : tmpInt;
                        colInfo.Scale = !int.TryParse(dRow["NUMERIC_SCALE"].ToString(), out tmpInt) ? 0 : tmpInt;
                        colInfo.DefaultValue = dRow["COLUMN_DEFAULT"].ToString();
                        colInfo.IsUnique = dRow["UK"] is DBNull ? false : true;
                        colInfo.IsPK = dRow["PK"] is DBNull ? false : true;
                        colInfo.IsFK = dRow["FK"] is DBNull ? false : true;

                        if (colInfo.IsFK)
                        {
                            colInfo.FKName = dRow["FK_NAME"].ToString();
                            colInfo.FKColumnName = dRow["REF_COLUMN_NAME"].ToString();
                            colInfo.FKTableName = dRow["REF_TABLE_NAME"].ToString();
                        }

                        colInfo.DbType = ToDbType(colInfo.SqlType, colInfo.Precision, colInfo.Scale);
                        colInfo.DalType = ToDalType(colInfo.SqlType, colInfo.Precision, colInfo.Scale);
                        tableInfo.AddColumn(colInfo);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new ResponseException(GenCodeToolResource.Error_GetColumn, ex);
            }
        }
        /// <summary>
        /// 往表中填充字段信息
        /// </summary>
        /// <param name="connectionString">数据库连接字符串</param>
        /// <param name="tableInfo">需要填充的表信息对象</param>
        public void FillColumnInfo(string connectionString, TableInfo tableInfo)
        {
            SqlConnection sqlConn = new SqlConnection(connectionString);

            try
            {
                sqlConn.Open();
            }
            catch (Exception ex)
            {
                throw new ResponseException(GenCodeToolResource.Error_OpenDB, ex);
            }

            StringBuilder colQuery = new StringBuilder();
            colQuery.AppendLine(@"SELECT ");
            colQuery.AppendLine(@"    A.colorder, ");
            colQuery.AppendLine(@"    A.name AS columnname, ");
            colQuery.AppendLine(@"    B.name AS typename, ");
            colQuery.AppendLine(@"    A.length, ");
            colQuery.AppendLine(@"    A.isnullable,");
            colQuery.AppendLine(@"    A.colid, ");
            colQuery.AppendLine(@"    D.value AS comment,");
            colQuery.AppendLine(@"    A.prec,");
            colQuery.AppendLine(@"    A.scale,");
            colQuery.AppendLine(@"    G.text AS initialvalue,");
            colQuery.AppendLine(@"    isunique = CASE WHEN EXISTS(SELECT ");
            colQuery.AppendLine(@"                                    1 ");
            colQuery.AppendLine(@"                                FROM ");
            colQuery.AppendLine(@"                                    sys.indexes U1 ");
            colQuery.AppendLine(@"                                LEFT JOIN ");
            colQuery.AppendLine(@"                                    sys.index_columns U2 ON(U1.object_id = U2.object_id AND U1.index_id = u2.index_id) ");
            colQuery.AppendLine(@"                                WHERE ");
            colQuery.AppendLine(@"                                    U1.object_id = A.id ");
            colQuery.AppendLine(@"                                AND ");
            colQuery.AppendLine(@"                                    U2.column_id = A.colid ");
            colQuery.AppendLine(@"                                AND ");
            colQuery.AppendLine(@"                                    U1.is_unique = 1) ");
            colQuery.AppendLine(@"               THEN ");
            colQuery.AppendLine(@"                1 ");
            colQuery.AppendLine(@"               ELSE ");
            colQuery.AppendLine(@"                0 ");
            colQuery.AppendLine(@"               END,");
            colQuery.AppendLine(@"    ispkey = CASE WHEN EXISTS(SELECT ");
            colQuery.AppendLine(@"                                1 ");
            colQuery.AppendLine(@"                              FROM ");
            colQuery.AppendLine(@"                                sysobjects ");
            colQuery.AppendLine(@"                              WHERE ");
            colQuery.AppendLine(@"                                xtype='PK' ");
            colQuery.AppendLine(@"                              AND ");
            colQuery.AppendLine(@"                                parent_obj=A.id ");
            colQuery.AppendLine(@"                              AND ");
            colQuery.AppendLine(@"                                name IN (SELECT ");
            colQuery.AppendLine(@"                                            name ");
            colQuery.AppendLine(@"                                         FROM ");
            colQuery.AppendLine(@"                                            sysindexes ");
            colQuery.AppendLine(@"                                         WHERE ");
            colQuery.AppendLine(@"                                            indid IN(SELECT ");
            colQuery.AppendLine(@"                                                        indid ");
            colQuery.AppendLine(@"                                                     FROM ");
            colQuery.AppendLine(@"                                                        sysindexkeys ");
            colQuery.AppendLine(@"                                                     WHERE ");
            colQuery.AppendLine(@"                                                        id=A.id ");
            colQuery.AppendLine(@"                                                     AND ");
            colQuery.AppendLine(@"                                                        colid=A.colid))) ");
            colQuery.AppendLine(@"             THEN ");
            colQuery.AppendLine(@"                1 ");
            colQuery.AppendLine(@"             ELSE ");
            colQuery.AppendLine(@"                0 ");
            colQuery.AppendLine(@"             END,");
            colQuery.AppendLine(@"    isfkey = CASE WHEN E.fkey IS NOT NULL THEN 1 ELSE 0 END,");
            colQuery.AppendLine(@"    I.name AS fkname,");
            colQuery.AppendLine(@"    H.name AS fkcolumn,");
            colQuery.AppendLine(@"    F.name AS fktable");
            colQuery.AppendLine(@"FROM ");
            colQuery.AppendLine(@"    syscolumns A ");
            colQuery.AppendLine(@"LEFT JOIN ");
            colQuery.AppendLine(@"    systypes B ON(A.xtype = B.xtype) ");
            colQuery.AppendLine(@"LEFT JOIN ");
            colQuery.AppendLine(@"    sysobjects C ON(C.id = A.id AND C.xtype = 'U' AND C.name <> 'dtproperties')  ");
            colQuery.AppendLine(@"LEFT JOIN ");
            colQuery.AppendLine(@"    sys.extended_properties D ON(D.minor_id = A.colid AND D.major_id = A.id) ");
            colQuery.AppendLine(@"LEFT JOIN ");
            colQuery.AppendLine(@"    sysforeignkeys E ON(E.fkeyid = A.id and E.fkey = A.colid) ");
            colQuery.AppendLine(@"LEFT JOIN ");
            colQuery.AppendLine(@"    sysobjects F ON(E.rkeyid = F.id) ");
            colQuery.AppendLine(@"LEFT JOIN ");
            colQuery.AppendLine(@"    syscomments G ON(A.cdefault = G.id) ");
            colQuery.AppendLine(@"LEFT JOIN ");
            colQuery.AppendLine(@"    syscolumns H ON(E.rkeyid = H.id and E.rkey = H.colid) ");
            colQuery.AppendLine(@"LEFT JOIN ");
            colQuery.AppendLine(@"    sysobjects I ON(I.id = E.constid) ");
            colQuery.AppendLine(@"WHERE ");
            colQuery.AppendLine(@"    A.id = (SELECT ");
            colQuery.AppendLine(@"                id ");
            colQuery.AppendLine(@"            FROM ");
            colQuery.AppendLine(@"                sysobjects ");
            colQuery.AppendLine(@"            WHERE ");
            colQuery.AppendLine(@"                id = OBJECT_ID(@TableName)) ");
            colQuery.AppendLine(@"            AND ");
            colQuery.AppendLine(@"                B.name <> 'sysname' ");
            colQuery.AppendLine(@"ORDER BY ");
            colQuery.AppendLine(@"    A.colorder ASC");
            
            SqlCommand command = new SqlCommand(colQuery.ToString(), sqlConn);
            SqlDataReader dataReader = null;
            ColumnInfo colInfo = null;
            int tmpInt = 0;

            try
            {
                command.Parameters.Add(new SqlParameter("@TableName", tableInfo.Name));
                dataReader = command.ExecuteReader();

                while (dataReader.Read())
                {
                    colInfo = new ColumnInfo();
                    colInfo.Name = dataReader[1].ToString();
                    colInfo.SqlType = dataReader[2].ToString().ToLower();
                    colInfo.MaxLength = !int.TryParse(dataReader[3].ToString(), out tmpInt) ? 0 : tmpInt;
                    colInfo.IsNullable = "1".Equals(dataReader[4].ToString()) ? true : false;
                    colInfo.ColId = int.Parse(dataReader[5].ToString());
                    colInfo.Comment = dataReader[6].ToString();
                    colInfo.Precision = !int.TryParse(dataReader[7].ToString(), out tmpInt) ? 0 : tmpInt;
                    colInfo.Scale = !int.TryParse(dataReader[8].ToString(), out tmpInt) ? 0 : tmpInt;
                    colInfo.DefaultValue = dataReader[9].ToString();
                    colInfo.IsUnique = "1".Equals(dataReader[10].ToString()) ? true : false;
                    colInfo.IsPK = "1".Equals(dataReader[11].ToString()) ? true : false;
                    colInfo.IsFK = "1".Equals(dataReader[12].ToString()) ? true : false;

                    if (colInfo.IsFK)
                    {
                        colInfo.FKName = dataReader[13].ToString();
                        colInfo.FKColumnName = dataReader[14].ToString();
                        colInfo.FKTableName = dataReader[15].ToString();
                    }

                    colInfo.DbType = ToDbType(colInfo.SqlType, colInfo.Precision, colInfo.Scale);
                    colInfo.DalType = ToDalType(colInfo.SqlType, colInfo.Precision, colInfo.Scale);
                    tableInfo.AddColumn(colInfo);
                }
            }
            catch (Exception ex)
            {
                throw new ResponseException(GenCodeToolResource.Error_GetColumn, ex);
            }
            finally
            {
                dataReader.Close();
                sqlConn.Close();
            }
        }
Esempio n. 4
0
        public void TestMethod1()
        {
            ProjectInfo projectInfo = new ProjectInfo();
            projectInfo.TemplatePath = @"E:\Projects\Framework\SourceCode\Master\GenCodeTool\CodeTemplate\CSWeb";
            projectInfo.GenTargetPath = @"E:\TestGenCode";
            projectInfo.Name = "TestProject";
            projectInfo.Namespace = "NFramework.TestProject";
            projectInfo.DisplayName = "测试生成";
            projectInfo.CodeInfoGetter = new CSCodeInfoGetter();
            projectInfo.DBInfoGetter = new MssqlDBInfoGetter();
            projectInfo.IsClearTargetFolder = true;

            TableInfo tableInfo = null;
            ColumnInfo colInfo = null;

            #region Company

            tableInfo = new TableInfo();
            tableInfo.Name = "Company";
            tableInfo.Comment = "公司";
            TableInfo comTableInfo = tableInfo;

            colInfo = new ColumnInfo();
            colInfo.Name = "Name";
            colInfo.DbType = DbType.String;
            colInfo.SqlType = "VarChar";
            colInfo.DalType = projectInfo.DBInfoGetter.ToDalType(colInfo.SqlType, colInfo.Precision, colInfo.Scale);
            colInfo.CodeType = projectInfo.CodeInfoGetter.ToCodeType(colInfo.DbType);
            colInfo.MaxLength = 100;
            colInfo.IsNullable = false;
            colInfo.Comment = "名称";
            colInfo.CurrTable = tableInfo;
            colInfo.IsGenSearchCondition = true;
            colInfo.IsGenInput = true;
            colInfo.IsGenSearchResult = true;
            colInfo.IsUnique = false;
            tableInfo.AddColumn(colInfo);

            colInfo = new ColumnInfo();
            colInfo.Name = "Code";
            colInfo.DbType = DbType.String;
            colInfo.SqlType = "VarChar";
            colInfo.DalType = projectInfo.DBInfoGetter.ToDalType(colInfo.SqlType, colInfo.Precision, colInfo.Scale);
            colInfo.CodeType = projectInfo.CodeInfoGetter.ToCodeType(colInfo.DbType);
            colInfo.MaxLength = 10;
            colInfo.IsNullable = false;
            colInfo.Comment = "编号";
            colInfo.CurrTable = tableInfo;
            colInfo.IsGenSearchCondition = true;
            colInfo.IsGenInput = true;
            colInfo.IsGenSearchResult = true;
            colInfo.IsUnique = true;
            tableInfo.AddColumn(colInfo);

            colInfo = new ColumnInfo();
            colInfo.Name = "CompanyId";
            colInfo.DbType = DbType.String;
            colInfo.SqlType = "VarChar";
            colInfo.DalType = projectInfo.DBInfoGetter.ToDalType(colInfo.SqlType, colInfo.Precision, colInfo.Scale);
            colInfo.CodeType = projectInfo.CodeInfoGetter.ToCodeType(colInfo.DbType);
            colInfo.MaxLength = 40;
            colInfo.IsNullable = false;
            colInfo.IsPK = true;
            colInfo.Comment = "ID";
            colInfo.CurrTable = tableInfo;
            colInfo.IsGenSearchCondition = false;
            colInfo.IsGenInput = false;
            colInfo.IsGenSearchResult = false;
            colInfo.IsUnique = true;
            tableInfo.AddColumn(colInfo);

            colInfo = new ColumnInfo();
            colInfo.Name = "CreateTime";
            colInfo.DbType = DbType.DateTime;
            colInfo.SqlType = "DateTime";
            colInfo.DalType = projectInfo.DBInfoGetter.ToDalType(colInfo.SqlType, colInfo.Precision, colInfo.Scale);
            colInfo.CodeType = projectInfo.CodeInfoGetter.ToCodeType(colInfo.DbType);
            colInfo.MaxLength = 12;
            colInfo.IsNullable = false;
            colInfo.IsPK = false;
            colInfo.Comment = "创建时间";
            colInfo.CurrTable = tableInfo;
            colInfo.IsGenSearchCondition = false;
            colInfo.IsGenInput = false;
            colInfo.IsGenSearchResult = false;
            colInfo.IsUnique = false;
            tableInfo.AddColumn(colInfo);

            colInfo = new ColumnInfo();
            colInfo.Name = "Status";
            colInfo.DbType = DbType.Int32;
            colInfo.SqlType = "Int";
            colInfo.DalType = projectInfo.DBInfoGetter.ToDalType(colInfo.SqlType, colInfo.Precision, colInfo.Scale);
            colInfo.CodeType = projectInfo.CodeInfoGetter.ToCodeType(colInfo.DbType);
            colInfo.MaxLength = 8;
            colInfo.DefaultValue = "((1))";
            colInfo.IsNullable = false;
            colInfo.IsPK = false;
            colInfo.Comment = "Status";
            colInfo.CurrTable = tableInfo;
            colInfo.IsGenSearchCondition = true;
            colInfo.IsGenInput = false;
            colInfo.IsGenSearchResult = true;
            colInfo.IsUnique = false;
            tableInfo.AddColumn(colInfo);

            colInfo = new ColumnInfo();
            colInfo.Name = "Col2";
            colInfo.DbType = DbType.String;
            colInfo.SqlType = "VarChar";
            colInfo.DalType = projectInfo.DBInfoGetter.ToDalType(colInfo.SqlType, colInfo.Precision, colInfo.Scale);
            colInfo.CodeType = projectInfo.CodeInfoGetter.ToCodeType(colInfo.DbType);
            colInfo.MaxLength = 50;
            colInfo.DefaultValue = "22";
            colInfo.IsNullable = true;
            colInfo.IsPK = false;
            colInfo.Comment = "Col2的字段";
            colInfo.CurrTable = tableInfo;
            colInfo.IsGenSearchCondition = true;
            colInfo.IsGenInput = false;
            colInfo.IsGenSearchResult = true;
            colInfo.IsUnique = false;
            tableInfo.AddColumn(colInfo);
            
            projectInfo.AddTableInfo(tableInfo);

            #endregion

            #region Department

            tableInfo = new TableInfo();
            tableInfo.Name = "Department";
            tableInfo.Comment = "部门";

            colInfo = new ColumnInfo();
            colInfo.Name = "Name";
            colInfo.DbType = DbType.String;
            colInfo.SqlType = "VarChar";
            colInfo.DalType = projectInfo.DBInfoGetter.ToDalType(colInfo.SqlType, colInfo.Precision, colInfo.Scale);
            colInfo.CodeType = projectInfo.CodeInfoGetter.ToCodeType(colInfo.DbType);
            colInfo.MaxLength = 100;
            colInfo.IsNullable = false;
            colInfo.Comment = "名称";
            colInfo.CurrTable = tableInfo;
            colInfo.IsGenSearchCondition = true;
            colInfo.IsGenInput = true;
            colInfo.IsGenSearchResult = true;
            colInfo.IsUnique = false;
            tableInfo.AddColumn(colInfo);

            colInfo = new ColumnInfo();
            colInfo.Name = "Code";
            colInfo.DbType = DbType.String;
            colInfo.SqlType = "VarChar";
            colInfo.DalType = projectInfo.DBInfoGetter.ToDalType(colInfo.SqlType, colInfo.Precision, colInfo.Scale);
            colInfo.CodeType = projectInfo.CodeInfoGetter.ToCodeType(colInfo.DbType);
            colInfo.MaxLength = 10;
            colInfo.IsNullable = false;
            colInfo.Comment = "编号";
            colInfo.CurrTable = tableInfo;
            colInfo.IsGenSearchCondition = true;
            colInfo.IsGenInput = true;
            colInfo.IsGenSearchResult = true;
            colInfo.IsUnique = true;
            tableInfo.AddColumn(colInfo);

            colInfo = new ColumnInfo();
            colInfo.Name = "DepartmentId";
            colInfo.DbType = DbType.String;
            colInfo.SqlType = "VarChar";
            colInfo.DalType = projectInfo.DBInfoGetter.ToDalType(colInfo.SqlType, colInfo.Precision, colInfo.Scale);
            colInfo.CodeType = projectInfo.CodeInfoGetter.ToCodeType(colInfo.DbType);
            colInfo.MaxLength = 40;
            colInfo.IsNullable = false;
            colInfo.IsPK = true;
            colInfo.Comment = "ID";
            colInfo.CurrTable = tableInfo;
            colInfo.IsGenSearchCondition = false;
            colInfo.IsGenInput = false;
            colInfo.IsGenSearchResult = false;
            colInfo.IsUnique = true;
            tableInfo.AddColumn(colInfo);

            colInfo = new ColumnInfo();
            colInfo.Name = "CompanyId";
            colInfo.DbType = DbType.String;
            colInfo.SqlType = "VarChar";
            colInfo.DalType = projectInfo.DBInfoGetter.ToDalType(colInfo.SqlType, colInfo.Precision, colInfo.Scale);
            colInfo.CodeType = projectInfo.CodeInfoGetter.ToCodeType(colInfo.DbType);
            colInfo.MaxLength = 40;
            colInfo.IsNullable = false;
            colInfo.IsPK = false;
            colInfo.IsFK = true;
            colInfo.FKName = "FK_Company_Department";
            colInfo.Comment = "所属公司ID";
            colInfo.CurrTable = tableInfo;
            colInfo.IsGenSearchCondition = false;
            colInfo.IsGenInput = false;
            colInfo.IsGenSearchResult = false;
            colInfo.IsUnique = false;
            colInfo.FKColumn = comTableInfo.PKList[0];
            tableInfo.AddColumn(colInfo);

            projectInfo.AddTableInfo(tableInfo);

            #endregion

            #region Position

            tableInfo = new TableInfo();
            tableInfo.Name = "Position";
            projectInfo.AddTableInfo(tableInfo);

            #endregion

            #region Employee

            tableInfo = new TableInfo();
            tableInfo.Name = "Employee";
            projectInfo.AddTableInfo(tableInfo);

            #endregion

            GenCodeHandler.GenCode(projectInfo);
        }