c \ # my sql 데이터베이스 에 따라 코드 생 성

6500 단어 c#데이터 뱅 크
코드 에 sql 코드 를 쓰 면 필드 이름, 표 이름 을 자주 사용 합 니 다.문자열 을 쓸 때마다 유지 하기 어 려 울 것 입 니 다. 제 습관 은 표 의 필드 이름 상수 입 니 다.일반적으로 이 표 에 대한 데이터 구 조 를 정의 하여 데 이 터 를 처리 할 때 사용 하기 편리 하 다.오늘 은 필드 이름 상수 와 표 에 따라 데이터 구 조 를 자동 으로 생 성 하 는 도 구 를 만 들 었 습 니 다.
사고방식 은 비교적 간단 하 다. 첫 번 째 단 계 는 데이터베이스 에 있 는 모든 테이블 이름 을 얻는다. 두 번 째 단 계 는 테이블 이름 에 따라 테이블 의 필드 이름, 필드 유형, 주석 을 얻는다. 세 번 째 단 계 는 얻 은 테이블 이름, 필드 이름, 필드 유형, 주석 에 따라 코드 를 생 성 한다.
다음은 코드 를 올 리 고 필요 한 것 은 스스로 연구 해 보 세 요.제 가 여기 있 는 MySql 류 는 제 가 포장 한 편리 한 Sql 문장의 클래스 입 니 다. 여기 서 MrWu. dll MySql. Data 를 가 져 오 세 요.
private List GetAllTableNames(MySQL mysql, string dbName)
        {
            List result = new List();
            string sql = string.Format("select table_name from information_schema.tables where table_schema='{0}'", dbName);
            DataSet ds = new DataSet();
            mysql.ExecuteSql(dbName, sql, null, ds);
            if (BaseFun.DataSetIsNullOrEmpty(ds))
                return null;

            DataTable dt = ds.Tables[0];
            if (BaseFun.DataTableIsNullOrEmpty(dt))
                return null;

            int len = dt.Rows.Count;
            for (int i = 0; i < len; i++)
            {
                result.Add(dt.Rows[i]["table_name"].ToString());
            }
            return result;
        }

        private void GenerateCode(MySQL mysql, string dbName, string tablename, string spaceName)
        {
            string sql = string.Format("select column_name,data_type,column_comment from information_schema.`columns` where table_name='{0}'", tablename);
            DataSet fieldDs = new DataSet();
            mysql.ExecuteSql(dbName, sql, null, fieldDs);
            if (BaseFun.DataSetIsNullOrEmpty(fieldDs))
                return;
            DataTable dt = fieldDs.Tables[0];
            if (BaseFun.DataTableIsNullOrEmpty(dt))
                return;
            GenerateCode(tablename, dt, spaceName);
        }

        private void GenerateCode(string tableName, DataTable dt, string spaceName)
        {
            string entityPath = @"code\Entity";
            string fieldNamePath = @"code\Field";

            if (!Directory.Exists(entityPath))
                Directory.CreateDirectory(entityPath);
            if (!Directory.Exists(fieldNamePath))
                Directory.CreateDirectory(fieldNamePath);

            string modelFieldNameCode =
@"public static class #tableNameField
{
#ReplaceCode
}";
            string modelFiledCode =
@"using System;
public static class #tableName
{
#ReplaceCode
}";

            string fieldNameCode = string.Empty;
            string fieldCode = string.Empty;

            fieldNameCode += string.Format("      public const string table_Name = \"{0}\"", tableName) + ";\r
"; int len = dt.Rows.Count; for (int i = 0; i < len; i++) { string comment = dt.Rows[i]["column_comment"].ToString(); if (!string.IsNullOrEmpty(comment)) { comment = string.Format( @" /// /// {0} /// ", comment); } fieldNameCode += comment; fieldNameCode += string.Format( " public const string {0}=\"{0}\"", dt.Rows[i]["column_name"].ToString() ) + ";\r
"; fieldCode += comment; fieldCode += " public " + GetType(dt.Rows[i]["data_type"].ToString()) + " " + dt.Rows[i]["column_name"] + " { get; set; }\r
"; } modelFieldNameCode = modelFieldNameCode.Replace("#tableName", tableName).Replace("#ReplaceCode", fieldNameCode); modelFiledCode = modelFiledCode.Replace("#tableName", tableName).Replace("#ReplaceCode", fieldCode); if (!string.IsNullOrEmpty(spaceName)) { modelFieldNameCode = "namespace " + spaceName + "{\r
" + modelFieldNameCode + "\r
}"; modelFiledCode = "namespace " + spaceName + "{\r
" + modelFiledCode + "\r
}"; } File.WriteAllText(fieldNamePath + "\\" + tableName + ".cs", modelFieldNameCode); File.WriteAllText(entityPath + "\\" + tableName + ".cs", modelFiledCode); } public string GetType(string typeName) { switch (typeName.ToLower()) { case "datetime": case "date": case "timestamp": return "DateTime"; case "bigint": return "long"; case "smallint": return "short"; case "int": case "mediumint": return "int"; case "longtext": case "text": case "char": case "varchar": case "enum": case "mediumtext": case "set": case "tinytext": return "string"; case "time": return "TimeSpan"; case "decimal": return "decimal"; case "binary": case "blob": case "longblob": case "mediumblob": case "tinyblob": case "varbinary": return "byte[]"; case "bit": return "bool"; case "double": case "float": return "double"; case "tinyint": return "sbyte"; case "geometry": return "System.Data.Entity.Spatial.DbGeometry"; default: return string.Empty; } }

좋은 웹페이지 즐겨찾기