c \ # my 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;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.