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 ;
using static System . Windows . Forms . VisualStyles . VisualStyleElement ;
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 ( ) ) ;
}
/// <summary>
/// 将数据库字段转换为驼峰命名
/// </summary>
/// <param name="dbField"></param>
/// <returns></returns>
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 < string > ( ) ;
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 + = "/// <summary>" + "\n" +
"/// " + GetTableComment ( tbname ) + "\n" +
"/// </summary>" + "\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 += @"/// <summary>" + "\n" + "///" + IsNullable + "\n" + " /// </summary>\n" +""+ " public " + type.Name +" "+ Name + " { get; set; }" + "\n";//不加注释版本
txt_ret . Text + = "\n\t" + @"/// <summary>" +
"\n\t" + "///" + IsNullable +
"\n\t" + "/// </summary>" +
"\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 button2_Click ( object sender , EventArgs e )
{
string tbname = txt_tablename . Text . Trim ( ) ; //要生成的表名
if ( tbname . Equals ( "请选择" ) | | tbname . Equals ( "" ) )
{
MessageBox . Show ( "请选择表" ) ;
return ;
} ;
var dt = GetDbTableInfo ( tbname ) ;
string uidatagridview = textBox2 . Text . Trim ( ) ;
textBox1 . Text = "" ;
textBox1 . Text + = $"DataTable data = DbHelperMySQL.Query(\" select * from { tbname } \ ");\n" ;
textBox1 . Text + = "this." + uidatagridview + ".DataSource = new BindingSource {DataSource = data};\n" ;
for ( int i = 0 ; i < dt . Rows . Count ; i + + )
{
var Name = dt . Rows [ i ] [ "Name" ] . ToString ( ) ;
textBox1 . Text + = $"var {Name}Column = {uidatagridview}.Columns[\" { Name } \ "];\n" ;
}
for ( int i = 0 ; i < dt . Rows . Count ; i + + )
{
var Name = dt . Rows [ i ] [ "Name" ] . ToString ( ) ;
var IsNullable = dt . Rows [ i ] [ "COMMENT" ] . ToString ( ) ;
textBox1 . Text + = $"{Name}Column.HeaderText = \" { IsNullable } \ ";\n" ;
}
textBox1 . Text + = $" {uidatagridview}.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.ColumnHeader;\n" ;
textBox1 . Text + = $" {uidatagridview}.AutoGenerateColumns = true;\n" ;
// textBox1.Text += $" {uidatagridview}.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;\n";
}
private void button3_Click ( object sender , EventArgs e )
{
string tbname = txt_tablename . Text . Trim ( ) ; //要生成的表名
if ( tbname . Equals ( "请选择" ) | | tbname . Equals ( "" ) )
{
MessageBox . Show ( "请选择表" ) ;
return ;
} ;
var dt = GetDbTableInfo ( tbname ) ;
string uidatagridview = textBox2 . Text . Trim ( ) ;
textBox1 . Text = "" ;
textBox1 . Text + = $" string sql = $\" SELECT column_name , column_comment from information_schema . COLUMNS where table_name = ' { tbname } ' ORDER BY ORDINAL_POSITION ; \ ";\r\n" +
$" DataTable dt = DbHelperMySQL.Query(sql);\n" ;
textBox1 . Text + = "List<DataGridViewColumn> cols = new List<DataGridViewColumn>();\n" ;
textBox1 . Text + = "for (int i = 0; i < dt.Rows.Count; i++){\n" +
" DataGridViewTextBoxColumn temp = new DataGridViewTextBoxColumn();\n" +
"temp.Name = dt.Rows[i][0].ToString();\n" +
"temp.HeaderText = dt.Rows[i][1].ToString();\n" +
"cols.Add(temp);" +
"}\n" ;
textBox1 . Text + = "DataGridViewButtonColumn editBtn = new DataGridViewButtonColumn();\r\n" +
"editBtn.HeaderText = \"编辑\";\r\n" +
"editBtn.Name = \"edit\";\r\n" +
"editBtn.UseColumnTextForButtonValue = true;\r\n" +
"editBtn.Frozen = true;\n" ;
textBox1 . Text + = " DataGridViewButtonColumn addBtn = new DataGridViewButtonColumn();\r\n" +
"addBtn.HeaderText = \"修改\";\r\n" +
"addBtn.Name = \"editgd\";\r\n" +
"addBtn.Text = \"editgd\";\r\n" +
"addBtn.UseColumnTextForButtonValue = true;\r\n" +
"addBtn.Frozen = true;\n " ;
textBox1 . Text + = "cols.Add(editBtn);\n cols.Add(addBtn);\n" ;
textBox1 . Text + = "if (cols.Last().Frozen)\r\n" +
"{\r\n " +
$"this.{uidatagridview}.RightToLeft = RightToLeft.Yes;\r\n" +
"cols.Reverse();\r\n" +
"}\r\n" +
$"this.{uidatagridview}.Columns.AddRange(cols.ToArray());\r\n\r\n" +
$"if (this.{uidatagridview}.Columns.Count > 0)\r\n" +
$"this.{uidatagridview}.FirstDisplayedScrollingColumnIndex = this.{uidatagridview}.Columns.Count - 2;\n" ;
textBox1 . Text + = $" {uidatagridview}.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.ColumnHeader;\n" ;
textBox1 . Text + = $"DataTable data = DbHelperMySQL.Query(\" select * from { tbname } \ ");\n" ;
textBox1 . Text + = $"this.{uidatagridview}.Rows.AddRange(data.AsEnumerable().Select(row => {{\r\n" +
"DataGridViewRow dataGridViewRow = new DataGridViewRow();\r\n " +
"DataGridViewButtonCell addCell = new DataGridViewButtonCell();\r\n" +
"addCell.Value = \"新增\";\r\n " +
"dataGridViewRow.Cells.Add(addCell);\r\n " +
"DataGridViewButtonCell editCell = new DataGridViewButtonCell();\r\n" +
"editCell.Value = \"修改\";\r\n " +
"dataGridViewRow.Cells.Add(editCell);\r\n " +
"foreach (var item in row.ItemArray.Reverse())\r\n " +
"{\r\n" +
"DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell();\r\n" +
"cell.Value = item;\r\n " +
"dataGridViewRow.Cells.Add(cell);\r\n" +
"}\r\n" +
"dataGridViewRow.Height = 40;\r\n" +
"return dataGridViewRow;\r\n" +
"}).ToArray());" ;
}
private void button4_Click ( object sender , EventArgs e )
{
string tbname = txt_tablename . Text . Trim ( ) ; //要生成的表名
if ( tbname . Equals ( "请选择" ) | | tbname . Equals ( "" ) )
{
MessageBox . Show ( "请选择表" ) ;
return ;
} ;
var dt = GetDbTableInfo ( tbname ) ;
string uidatagridview = textBox2 . Text . Trim ( ) ;
textBox1 . Text = "" ;
textBox1 . Text + = "List<DataGridViewColumn> cols = new List<DataGridViewColumn>();\n" ;
for ( int i = 0 ; i < dt . Rows . Count ; i + + )
{
var Name = dt . Rows [ i ] [ "Name" ] . ToString ( ) ;
var IsNullable = dt . Rows [ i ] [ "COMMENT" ] . ToString ( ) ;
textBox1 . Text + = $"DataGridViewTextBoxColumn {Name}Cloumn = new DataGridViewTextBoxColumn();\n" ;
textBox1 . Text + = $"{Name}Cloumn.Name = \" { Name } \ ";" +
$"{Name}Cloumn.HeaderText =\" { IsNullable } \ ";" +
$"cols.Add({Name}Cloumn);\n" ;
}
textBox1 . Text + = "DataGridViewButtonColumn editBtn = new DataGridViewButtonColumn();\r\n" +
"editBtn.HeaderText = \"编辑\";\r\n" +
"editBtn.Name = \"edit\";\r\n" +
"editBtn.UseColumnTextForButtonValue = true;\r\n" +
"editBtn.Frozen = true;\n" ;
textBox1 . Text + = " DataGridViewButtonColumn addBtn = new DataGridViewButtonColumn();\r\n" +
"addBtn.HeaderText = \"修改\";\r\n" +
"addBtn.Name = \"editgd\";\r\n" +
"addBtn.Text = \"editgd\";\r\n" +
"addBtn.UseColumnTextForButtonValue = true;\r\n" +
"addBtn.Frozen = true;\n " ;
textBox1 . Text + = "cols.Add(editBtn);\n cols.Add(addBtn);\n" ;
textBox1 . Text + = "if (cols.Last().Frozen)\r\n" +
"{\r\n " +
$"this.{uidatagridview}.RightToLeft = RightToLeft.Yes;\r\n" +
"cols.Reverse();\r\n" +
"}\r\n" +
$"this.{uidatagridview}.Columns.AddRange(cols.ToArray());\r\n\r\n" +
$"if (this.{uidatagridview}.Columns.Count > 0)\r\n" +
$"this.{uidatagridview}.FirstDisplayedScrollingColumnIndex = this.{uidatagridview}.Columns.Count - 2;\n" ;
textBox1 . Text + = $" {uidatagridview}.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.ColumnHeader;\n" ;
textBox1 . Text + = $"DataTable data = DbHelperMySQL.Query(\" select * from { tbname } \ ");\n" ;
textBox1 . Text + = $"this.{uidatagridview}.Rows.AddRange(data.AsEnumerable().Select(row => {{\r\n" +
"DataGridViewRow dataGridViewRow = new DataGridViewRow();\r\n " +
"DataGridViewButtonCell addCell = new DataGridViewButtonCell();\r\n" +
"addCell.Value = \"新增\";\r\n " +
"dataGridViewRow.Cells.Add(addCell);\r\n " +
"DataGridViewButtonCell editCell = new DataGridViewButtonCell();\r\n" +
"editCell.Value = \"修改\";\r\n " +
"dataGridViewRow.Cells.Add(editCell);\r\n " +
"foreach (var item in row.ItemArray.Reverse())\r\n " +
"{\r\n" +
"DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell();\r\n" +
"cell.Value = item;\r\n " +
"dataGridViewRow.Cells.Add(cell);\r\n" +
"}\r\n" +
"dataGridViewRow.Height = 40;\r\n" +
"return dataGridViewRow;\r\n" +
"}).ToArray());" ;
}
//订单下拉模糊搜索
private void orderId_TextUpdate ( object sender , EventArgs e ) //不要用TextChanged
{
string s = this . txt_tablename . Text ; //获取输入内容
List < string > 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 ) ;
}
/// <summary>
/// 根据参数,获取数据表信息
/// </summary>
/// <param name="tabname"></param>
public static DataTable GetDbTableInfo ( string tabname )
{
string str = $"SELECT COLUMN_NAME AS Name, COLUMN_TYPE AS Type,COLUMN_COMMENT AS COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '{tabname}' ORDER BY ORDINAL_POSITION;" ;
var dt = DbHelperMySQL . Query ( str ) ;
return dt ;
}
public static List < string > GetTableName ( string tableName )
{
string sql = $"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{DbHelperMySQL.DbName}' AND TABLE_NAME LIKE '{tableName}%' limit 20;" ;
var dt = DbHelperMySQL . Query ( sql ) ;
//查询数据库表中所有已录入人员
List < string > sList = new List < string > ( ) ; //存放数据库查询结果
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 < string > GetTableName ( )
{
string sql = $"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{DbHelperMySQL.DbName}';" ;
var dt = DbHelperMySQL . Query ( sql ) ;
//查询数据库表中所有已录入人员
List < string > sList = new List < string > ( ) ; //存放数据库查询结果
for ( int i = 0 ; i < dt . Rows . Count ; i + + )
{
sList . Add ( dt . Rows [ i ] [ "TABLE_NAME" ] . ToString ( ) ) ;
}
return sList ;
//return dt;
}
/// <summary>
/// 类型转换枚举
/// </summary>
protected Dictionary < string , Type > DbTypeDic { get ; } = new Dictionary < string , Type > ( )
{
{ "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 ) } ,
} ;
/// <summary>
/// 获取字段类型
/// </summary>
/// <param name="dbTypeStr"></param>
/// <returns></returns>
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 ;
}
}
}