using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlTypes; using System.Drawing; using System.Globalization; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } string folderName = "GenFolder"; // 文件夹名称 private void Form1_Load(object sender, EventArgs e) { this.txt_tablename.Items.AddRange(GetTableName().ToArray()); } /// /// 将数据库字段转换为驼峰命名 /// /// /// public static string ToCamelCase(string dbField) { string[] words = dbField.Split('_'); for (int i = 1; i < words.Length; i++) { words[i] = char.ToUpper(words[i][0]) + words[i].Substring(1); } return string.Join("", words); } // 根据数据库表名生成实体类名称 static string GenerateClassName(string tableName) { string[] words = tableName.Split('_'); StringBuilder sb = new StringBuilder(); foreach (string word in words) { sb.Append(CultureInfo.CurrentCulture.TextInfo.ToTitleCase(word.ToLower())); } return sb.ToString(); } private void button1_Click(object sender, EventArgs e) { //string constr = txt_constr.Text.Trim();//数据库链接字符串 txt_ret.Text = ""; string tbname = txt_tablename.Text.Trim();//要生成的表名 if (tbname.Equals("请选择") || tbname.Equals("")) { MessageBox.Show("请选择表"); return; }; string namespaceName = namespace_name.Text.Trim(); var dt = GetDbTableInfo(tbname); var list = new List(); txt_ret.Text += "using System;\n" + "using NCA_MES_Models.CommonUtils.DB.DBAttribute;\n\n"; txt_ret.Text += "namespace "+ namespaceName + "{\n\n"; txt_ret.Text += "/// " + "\n" + "/// " + GetTableComment(tbname) + "\n"+ "/// " + "\n" + "[TableName(\"" + tbname + "\")]" + "\n"+ "public class " + GenerateClassName(tbname) + " {"; for (int i = 0; i < dt.Rows.Count; i++) { var Name = dt.Rows[i]["Name"].ToString(); var Type = dt.Rows[i]["Type"].ToString(); var IsNullable = dt.Rows[i]["COMMENT"].ToString(); Type type = DbTypeStr_To_CsharpType(Type); //txt_ret.Text += @"/// " + "\n" + "///" + IsNullable + "\n" + " /// \n" +""+ " public " + type.Name +" "+ Name + " { get; set; }" + "\n";//不加注释版本 txt_ret.Text += "\n\t" + @"/// " + "\n\t" + "///" + IsNullable + "\n\t" + "/// " + "\n\t" + "[TableField(\""+ Name + "\")]" + "\n\t"+ " public " + type.Name +" "+ ToCamelCase(Name) + " { get; set; }"; //加注释记得引用using } txt_ret.Text += "\n}\n}"; // 创建文件夹 string folderPath = Path.Combine(Environment.CurrentDirectory, folderName); Directory.CreateDirectory(folderPath); // 创建文件并写入内容 string filePath = Path.Combine(folderPath, GenerateClassName(tbname)+".cs"); File.WriteAllText(filePath, txt_ret.Text); // 打开文件夹 System.Diagnostics.Process.Start(folderPath); } //订单下拉模糊搜索 private void orderId_TextUpdate(object sender, EventArgs e) //不要用TextChanged { string s = this.txt_tablename.Text; //获取输入内容 List sList = GetTableName(s); //存放数据库查询结果 //提前下拉,以显示搜索结果(必须要在添加项之前下拉,否则会将第一项自动添加到编辑框内 覆盖掉输入的内容) this.txt_tablename.DroppedDown = true; //显示下拉列表,但是显示后鼠标指针就不见了 Cursor.Current = Cursors.Default; //将指针显示出来 //在表中已录入名字中寻找包含输入内容的项 有则添加到comboBox项中 this.txt_tablename.Items.Clear(); this.txt_tablename.Items.AddRange(sList.ToArray()); this.txt_tablename.Select(this.txt_tablename.Text.Length, 0); } /// /// 根据参数,获取数据表信息 /// /// public static DataTable GetDbTableInfo(string tabname) { string str = string.Format(@"SELECT COLUMN_NAME AS Name, COLUMN_TYPE AS Type,COLUMN_COMMENT AS COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '{0}';", tabname); var dt = DbHelperMySQL.Query(str); return dt; } public static List GetTableName(string tableName) { string sql = $"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{DbHelperMySQL.DbName}' AND TABLE_NAME LIKE '{tableName}%' limit 10;"; var dt = DbHelperMySQL.Query(sql); //查询数据库表中所有已录入人员 List sList = new List(); //存放数据库查询结果 for (int i = 0; i < dt.Rows.Count; i++) { sList.Add(dt.Rows[i]["TABLE_NAME"].ToString()); } return sList; //return dt; } public static string GetTableComment(string tableName) { string sql = $"SELECT TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{DbHelperMySQL.DbName}' AND TABLE_NAME ='{tableName}';"; var dt = DbHelperMySQL.Query(sql); if(dt.Rows.Count<1) return tableName; return dt.Rows[0]["TABLE_COMMENT"].ToString(); } public static List GetTableName() { string sql = $"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{DbHelperMySQL.DbName}';"; var dt = DbHelperMySQL.Query(sql); //查询数据库表中所有已录入人员 List sList = new List(); //存放数据库查询结果 for (int i = 0; i < dt.Rows.Count; i++) { sList.Add(dt.Rows[i]["TABLE_NAME"].ToString()); } return sList; //return dt; } /// /// 类型转换枚举 /// protected Dictionary DbTypeDic { get; } = new Dictionary() { { "int", typeof(Int32) }, { "text", typeof(string) }, { "bigint", typeof(Int64) }, { "binary", typeof(byte[]) }, { "bit", typeof(bool) }, { "char", typeof(string) }, { "date", typeof(DateTime) }, { "datetime", typeof(DateTime) }, { "datetime2", typeof(DateTime) }, { "decimal", typeof(decimal) }, { "float", typeof(double) }, { "image", typeof(byte[]) }, { "money", typeof(decimal) }, { "nchar", typeof(string) }, { "ntext", typeof(string) }, { "numeric", typeof(decimal) }, { "nvarchar", typeof(string) }, { "real", typeof(Single) }, { "smalldatetime", typeof(DateTime) }, { "smallint", typeof(Int16) }, { "smallmoney", typeof(decimal) }, { "timestamp", typeof(DateTime) }, { "tinyint", typeof(byte) }, { "varbinary", typeof(byte[]) }, { "varchar", typeof(string) }, { "variant", typeof(object) }, { "uniqueidentifier", typeof(Guid) }, }; /// /// 获取字段类型 /// /// /// public virtual Type DbTypeStr_To_CsharpType(string dbTypeStr) { if (dbTypeStr.Contains('(')) { string[] strings = dbTypeStr.Split('('); dbTypeStr = strings[0]; } string _dbTypeStr = dbTypeStr.ToLower(); Type type = null; if (DbTypeDic.ContainsKey(_dbTypeStr)) type = DbTypeDic[_dbTypeStr]; else type = typeof(string); return type; } } }