using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
using System.IO;
using System.Reflection;
namespace UnitTest
{
class Program
{
static void Main(string[] args)
{
#region 读取数据库就绪准备
string connectionString = "数据库连接";
SqlConnection con = new SqlConnection(connectionString);
DataTable dt = new DataTable();
con.Open(); //打开数据库
string sql = "SELECT sobj.name as TableName,scol.name as ColumnName,sprop.[value] as Des,sc.name as TypeName,sc.length,scol.isnullable FROM syscolumns as scol inner join sys.sysobjects as sobj on scol.id=sobj.id and sobj.xtype='U' and sobj.name<>'dtproperties' inner join systypes as sc on sc.xusertype=scol.xtype left join sys.extended_properties as sprop on scol.id=sprop.major_id and scol.colid=sprop.minor_id";
//SqlCommand com = new SqlCommand(sql, con);
// SqlDataReader read = com.ExecuteReader();
SqlDataAdapter sda = new SqlDataAdapter(sql, con);
sda.Fill(dt);
con.Close();//关闭数据库
List<string> tableNameArray = new List<string>();
#endregion
#region 从数据库读取所有字段名称、字段类型、长度、是否为空、描述
for (int i = 0; i < dt.Rows.Count; i++)
{
var read = dt.Rows[i];
tableNameArray.Add(Convert.ToString(read["TableName"])); //将表名保存到列表中
// Console.WriteLine("表名:" + read["TableName"] + " 字段名称:" + read["ColumnName"] + " 字段描述:" + read["Des"] + " 字段长度:" + read["length"] + " 字段类型:" + read["TypeName"] + " 是否为空:" + read["isnullable"]);
}
tableNameArray = tableNameArray.Distinct().ToList();
int n = 0;
foreach (string tableName in tableNameArray)
{
n= n+ 1;
DataRow[] dr = dt.Select("TableName='"+ tableName + "'");
ClassBuilder classBuilder = new ClassBuilder("Model", tableName,dr);
classBuilder.Execute();
}
#endregion
}
public class ClassBuilder
{
#region 属性
/// <summary>写入器</summary>
public StringBuilder StringBuilder = new StringBuilder();
/// <summary>写入器</summary>
public TextWriter TextWriter { get; set; }
/// <summary>数据表</summary>
public string TableName { get; set; }
/// <summary>命名空间</summary>
public string Namespace { get; set; }
/// <summary>数据行</summary>
public DataRow[] DataRow { get; set; }
/// <summary>引用命名空间</summary>
public HashSet<String> Usings { get; } = new HashSet<String>(StringComparer.OrdinalIgnoreCase);
/// <summary>纯净类</summary>
public Boolean Pure { get; set; }
/// <summary>生成接口</summary>
public Boolean Interface { get; set; }
/// <summary>基类</summary>
public string BaseClass { get; set; }
public int Indent = 5;//缩进
public string IndetSpace { get; set; }//缩进空格
#endregion
#region 构造
/// <summary>实例化</summary>
public ClassBuilder(string nameSpace, string tableName, DataRow[] dr)
{
Namespace = nameSpace;
TableName = tableName;
DataRow = dr;
Usings.Add("System");
Usings.Add("System.Collections.Generic");
Usings.Add("System.ComponentModel");
TextWriter = new StringWriter(StringBuilder); //实例化
}
#endregion
#region 主方法
/// <summary>执行生成</summary>
public virtual void Execute()
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
using System.IO;
using System.Reflection;
namespace UnitTest
{
class Program
{
static void Main(string[] args)
{
#region 读取数据库就绪准备
string connectionString = "数据库连接";
SqlConnection con = new SqlConnection(connectionString);
DataTable dt = new DataTable();
con.Open(); //打开数据库
string sql = "SELECT sobj.name as TableName,scol.name as ColumnName,sprop.[value] as Des,sc.name as TypeName,sc.length,scol.isnullable FROM syscolumns as scol inner join sys.sysobjects as sobj on scol.id=sobj.id and sobj.xtype='U' and sobj.name<>'dtproperties' inner join systypes as sc on sc.xusertype=scol.xtype left join sys.extended_properties as sprop on scol.id=sprop.major_id and scol.colid=sprop.minor_id";
//SqlCommand com = new SqlCommand(sql, con);
// SqlDataReader read = com.ExecuteReader();
SqlDataAdapter sda = new SqlDataAdapter(sql, con);
sda.Fill(dt);
con.Close();//关闭数据库
List<string> tableNameArray = new List<string>();
#endregion
#region 从数据库读取所有字段名称、字段类型、长度、是否为空、描述
for (int i = 0; i < dt.Rows.Count; i++)
{
var read = dt.Rows[i];
tableNameArray.Add(Convert.ToString(read["TableName"])); //将表名保存到列表中
// Console.WriteLine("表名:" + read["TableName"] + " 字段名称:" + read["ColumnName"] + " 字段描述:" + read["Des"] + " 字段长度:" + read["length"] + " 字段类型:" + read["TypeName"] + " 是否为空:" + read["isnullable"]);
}
tableNameArray = tableNameArray.Distinct().ToList();
int n = 0;
foreach (string tableName in tableNameArray)
{
n= n+ 1;
DataRow[] dr = dt.Select("TableName='"+ tableName + "'");
ClassBuilder classBuilder = new ClassBuilder("Model", tableName,dr);
classBuilder.Execute();
}
#endregion
}
public class ClassBuilder
{
#region 属性
/// <summary>写入器</summary>
public StringBuilder StringBuilder = new StringBuilder();
/// <summary>写入器</summary>
public TextWriter TextWriter { get; set; }
/// <summary>数据表</summary>
public string TableName { get; set; }
/// <summary>命名空间</summary>
public string Namespace { get; set; }
/// <summary>数据行</summary>
public DataRow[] DataRow { get; set; }
/// <summary>引用命名空间</summary>
public HashSet<String> Usings { get; } = new HashSet<String>(StringComparer.OrdinalIgnoreCase);
/// <summary>纯净类</summary>
public Boolean Pure { get; set; }
/// <summary>生成接口</summary>
public Boolean Interface { get; set; }
/// <summary>基类</summary>
public string BaseClass { get; set; }
public int Indent = 5;//缩进
public string IndetSpace { get; set; }//缩进空格
#endregion
#region 构造
/// <summary>实例化</summary>
public ClassBuilder(string nameSpace, string tableName, DataRow[] dr)
{
Namespace = nameSpace;
TableName = tableName;
DataRow = dr;
Usings.Add("System");
Usings.Add("System.Collections.Generic");
Usings.Add("System.ComponentModel");
TextWriter = new StringWriter(StringBuilder); //实例化
}
#endregion
#region 主方法
/// <summary>执行生成</summary>
public virtual void Execute()