You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

382 lines
19 KiB
C#

1 year ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
1 year ago
using System.Data.SqlTypes;
1 year ago
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
1 year ago
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
1 year ago
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();
}
1 year ago
1 year ago
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";
1 year ago
txt_ret.Text += "/// <summary>" + "\n" +
"/// " + GetTableComment(tbname) + "\n"+
"/// </summary>" + "\n" +
"[TableName(\"" + tbname + "\")]" + "\n"+
"public class " + GenerateClassName(tbname) + " {";
1 year ago
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);
}
1 year ago
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());";
}
1 year ago
//订单下拉模糊搜索
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)
{
1 year ago
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;";
1 year ago
var dt = DbHelperMySQL.Query(str);
return dt;
}
public static List<string> GetTableName(string tableName)
{
1 year ago
string sql = $"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{DbHelperMySQL.DbName}' AND TABLE_NAME LIKE '{tableName}%' limit 20;";
1 year ago
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;
}
1 year ago
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();
}
1 year ago
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;
}
}
}