代码生成器

本文介绍了一个使用C#实现的简单代码生成器,该生成器可以从数据库表结构自动生成对应的C#实体类代码。通过读取指定数据库中的表结构信息,能够为每个表生成包含属性的类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.界面设计

image

二.具体代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 代码生成器1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnLink_Click(object sender, EventArgs e)
        {
            string sql = "select * from INFORMATION_SCHEMA.TABLES";
            DataTable dt = ExecuteDatatable(sql);
            foreach (DataRow row in dt.Rows)
            {
                string tableName = (string)row["TABLE_NAME"];
                clbDatabase.Items.Add(tableName);
 
            }
          
        }
        private static string constr = ConfigurationManager.ConnectionStrings["dbconstr"].ConnectionString;
        #region 数据库链接
        private DataTable ExecuteDatatable(string sql, params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(constr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    cmd.Parameters.AddRange(parameters);
                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                    DataSet dataset = new DataSet();
                    adapter.Fill(dataset);
                    return dataset.Tables[0];
                }
            }
        }
        #endregion
        #region 代码生成
        private void btnGenerate_Click(object sender, EventArgs e)
        {
            string sql = "select * from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME=@tabel";
            foreach (string tablename in clbDatabase.CheckedItems)
            {
                DataTable dt = ExecuteDatatable(sql,
                     new SqlParameter("@tabel", tablename));
                //MessageBox.Show(dt.TableName.ToString());
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("Class " + tablename);
                sb.AppendLine("{");

                foreach (DataRow row in dt.Rows)
                {
                    string dataType = ToVSType((string)row["DATA_TYPE"]);
                    string dataName = (string)row["COLUMN_NAME"];
                    sb.AppendLine("public " + dataType + " " + dataName + " {get;set;}");
                }
                sb.AppendLine("}");
                MessageBox.Show(sb.ToString());


            }

        }
        #endregion
        //数据库数据类型向VS转换
        private string ToVSType(string dataType)
        {
            switch (dataType)
            {
                case "int":
                    return "int";
                    //break;
                case "nchar":
                case "text":
                    return "string";
                    //break;
                case "bit":
                    return "bool";
                    //break;
                case "DateTime":
                    return "datetime";
                    //break;
                default :
                    return "object";

                   
            }
        }

    }
}

转载于:https://www.cnblogs.com/shangguanjinwen/p/3700834.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值