.net向 Web版代码生成器Demo

5 篇文章 0 订阅

工具的核心是

select name from master..sysdatabases  order by name
--查出所有数据库
--然后根据数据库查询出对应的表

use DataBase;
--查出当前数据库下所有用户表
SELECT name FROM sysobjects where type = 'u' ; 
--查询表结构
SELECT *  FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TableName'

最终效果图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
前端代码
这里前端框架使用的是EasyUI

--引用JS/CSS
    <link href="EasyUI/themes/default/easyui.css" rel="stylesheet" />
    <link href="EasyUI/themes/icon.css" rel="stylesheet" />
    <script src="EasyUI/jquery.min.js"></script>
    <script src="EasyUI/jquery.easyui.min.js"></script>
    <script>
        $(function () {
            //连接事件
            $("#btnConnect").click(function () {
                var USERID = $("#USERID").val();
                var PASSWORD = $("#PASSWORD").val();
                var Server = $("#Server").val();
                if (USERID != "" && PASSWORD != "" && Server != "") {
                    //清空树
                    $("#list").tree('loadData', []);
                    $("#list").tree({
                        url: 'Index.aspx?Type=LoadTree&USERID=' + USERID + '&PASSWORD=' + PASSWORD + '&Server=' + Server,
                        dataType: "json",
                        onLoadSuccess: function () {  //加载完成事件
                            $("#list").tree("collapseAll");  //收起树节点
                        },
                        onClick: function (node) {//点击树事件
                            //0是数据库1是表
                            var ids = node.id == 0 ? node.id : node.id.split(',');
                            if (ids != 0) {
                                //存储表名
                                $("#hidName").val(node.text);
                                //加载Table
                                $("#tab").datagrid({
                                    url: 'Index.aspx?Type=LoadTable&TableName=' + ids[1] + "," + node.text,
                                    dataType: "json",
                                    striped: true,
                                    toolbar: '#tb',
                                    rownumbers: true,
                                    checkOnSelect: true,
                                    selectOnCheck: true,
                                    sortName: 'Name',
                                    sortOrder: "desc"
                                })
                            }
                        }
                    });
                }
            });
                     
        })
        //导出前先存储勾选字段
        function Export() {
            if ($("#hidName").val() != "") {
                var strJson = [];
                //没勾选就获取所有数据
                var rows = $("#tab").datagrid("getSelections").length <= 0 ? $("#tab").datagrid("getRows") : $("#tab").datagrid("getSelections");
                for (var i = 0; i < rows.length; i++) {
                    var _json = {
                        "Name": rows[i].Name,
                        "Type": rows[i].Type,
                        "Length": rows[i].Length,
                        "ToType": rows[i].ToType
                    };
                    strJson.push(_json);
                }
                $("#hidData").val(JSON.stringify(strJson));
                return true;
            } else
                alert("请选择需要导出的表!");
            return false;
        }
    </script>
    <body class="easyui-layout">
    <form id="form1" runat="server">
    <input type="hidden" id="hidName" runat="server" />
    <input type="hidden" id="hidData" runat="server" />
    <div data-options="region:'north',title:'North Title',split:true" style="height:180px;">
        <div style="margin-top: 5px;    margin-bottom: 5px;">
            <div style="display: inline-block;width: 45%;text-align: right;"><span>服务器名称:</span></div>
            <div style="display: inline-block;"><input class="easyui-textbox" data-options="" style="width:300px" id="Server" /></div>
        </div>
        <div style="margin-top: 5px;    margin-bottom: 5px;">
            <div style="display: inline-block;width: 45%;text-align: right;"><span>用户名:</span></div>
            <div style="display: inline-block;"><input class="easyui-textbox" data-options="" style="width:300px" id="USERID" /></div>
        </div>
        <div style="margin-top: 5px;    margin-bottom: 5px;">
            <div style="display: inline-block;width: 45%;text-align: right;"><span>密码:</span></div>
            <div style="display: inline-block;"><input class="easyui-textbox" data-options="" style="width:300px" id="PASSWORD" /></div>
        </div>
        <div style="margin-top: 5px;    margin-bottom: 5px;text-align:center;">
            <button type="button" class="easyui-linkbutton" data-options="iconCls:'icon-ok'" style="width: 200px;" id="btnConnect">连接</button>
        </div>
    </div>
    <div data-options="region:'west',title:'West',split:true" style="width:150px;">
        <div>
            <ul id="list" class="easyui-tree"></ul>
        </div>
    </div>
    <div data-options="region:'center',title:'center title'" style="padding:5px;background:#eee;">
        <div style="text-align:center;">
            <table class="easyui-datagrid" id="tab">
                <thead>
                    <tr>
                        <th  field="ck" checkbox="true"></th>
                        <th data-options="field:'Name'">Name</th>
                        <th data-options="field:'Type'">Type</th>
                        <th data-options="field:'Length'">Length</th>
                        <th data-options="field:'ToType'">To Type</th>
                    </tr>
                </thead>
            </table>
            <div id="tb">                
                <asp:Button ID="btnDown" runat="server" Text="生成实体类" OnClick="btnDown_Click" class="easyui-linkbutton textbox-button" data-options="iconCls:'icon-pen',plain:true"  OnClientClick=" return Export();" />
                <asp:Button ID="btnDownService" runat="server" Text="生成Service" class="easyui-linkbutton textbox-button" data-options="iconCls:'icon-pen',plain:true"  OnClientClick=" return Export();" OnClick="btnDownService_Click" />
            </div>
        </div>
    </div>
        </form>
</body>

后台代码:

using Code_generation.DAL;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Code_generation
{
    public partial class Index1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {

                HttpContext context = System.Web.HttpContext.Current;
                if (context.Request.QueryString["Type"] != null)
                {
                    if (context.Request.QueryString["Type"].ToString() == "LoadTree")//加载树
                        GetDataBaseList(context);
                    else if (context.Request.QueryString["Type"].ToString() == "LoadTable")//加载表
                        GetTableInfromation(context);
                }
            }
        }
        /// <summary>
        /// 获取表结构
        /// </summary>
        /// <param name="context"></param>
        private void GetTableInfromation(HttpContext context)
        {
            //获取数据库名和表名
            string[] strName = context.Request.QueryString["TableName"].ToString().Split(',');
            string strDB = strName[0];
            string strTableName = strName[1];

            DataTable dt = TableInfromation.GetTableInfromation(strDB, strTableName);

            string strJson = JsonConvert.SerializeObject(dt);

            context.Response.Clear();
            context.Response.ContentEncoding = Encoding.UTF8;
            context.Response.ContentType = "application/json";

            context.Response.Write(strJson);
            context.Response.Flush();
            context.Response.End();
        }
        /// <summary>
        /// 获取数据库列表
        /// </summary>
        /// <param name="context"></param>
        public void GetDataBaseList(HttpContext context)
        {
            //链接信息
            string strUSERID = context.Request.QueryString["USERID"];
            string strPASSWORD = context.Request.QueryString["PASSWORD"];
            string strServer = context.Request.QueryString["Server"];

            DBHelper.conntion = "USER ID=" + strUSERID + ";PASSWORD=" + strPASSWORD + ";INITIAL CATALOG=master; server=" + strServer;
            //所有数据库
            DataTable dt = TableInfromation.GetAllDataBase();
            StringBuilder sb = new StringBuilder();
            //查询指定数据库下所有的用户表
            foreach (DataRow dr in dt.Rows)
            {
                sb.Append("use [" + dr[0].ToString() + "];");
                sb.Append("select '" + dr[0].ToString() + "' name union all SELECT name FROM sysobjects where type = 'u' ; ");
            }
            DataSet ds = DBHelper.Query(sb.ToString());

            List<DataBases> list = new List<DataBases>();
            foreach (DataTable dataTable in ds.Tables)
            {
                List<DataBase_children> listChildren = new List<DataBase_children>();
                DataBases db = new DataBases();
                db.id = 0;
                for (int i = 0; i < dataTable.Rows.Count; i++)
                {
                    //获取数据库名
                    if (i == 0)
                        db.text = dataTable.Rows[0][0].ToString();
                    else//获取该数据库下表数据
                        listChildren.Add(new DataBase_children()
                        {
                            id = "1," + db.text,
                            text = dataTable.Rows[i]["name"].ToString()
                        });
                }
                db.children = listChildren;
                list.Add(db);
            }

            string strJson = JsonConvert.SerializeObject(list);
            context.Response.Clear();
            context.Response.ContentEncoding = Encoding.UTF8;
            context.Response.ContentType = "application/json";
            context.Response.Write(strJson);
            context.Response.Flush();
            context.Response.End();

        }
        /// <summary>
        /// 写入文件内容
        /// </summary>
        /// <param name="strContent">文件内容</param>
        /// <param name="strSrc">文件路径</param>
        public static void TxtWrite(string strContent,string strSrc)
        {
            //判断文件是否存在
            if (System.IO.File.Exists(strSrc))
            {
                using (System.IO.StreamWriter sw = new System.IO.StreamWriter(strSrc, false))
                {
                    //内容写入
                    sw.WriteLine(strContent);
                    //关闭连接
                    sw.Close();
                }
            }
            else
            {
                //创建文件后关闭
                System.IO.File.Create(strSrc).Close();
                //打开文件
                using (System.IO.StreamWriter sw = new System.IO.StreamWriter(strSrc, false))
                {
                    sw.WriteLine(strContent);
                    sw.Close();
                }
            }
        }
        protected void btnDown_Click(object sender, EventArgs e)
        {
            //需要生成的字段
            DataTable dt = JsonConvert.DeserializeObject<DataTable>(hidData.Value);
            StringBuilder sb = new StringBuilder();
            sb.Append("using System;\n");
            sb.Append("using System.Collections.Generic;\n");
            sb.Append("using System.Linq;\n");
            sb.Append("using System.Web;\n");
            sb.Append("namespace Your namespace\n{\n");
            sb.Append("    public class "+ hidName.Value + "\n    {\n");
            foreach (DataRow dataRow in dt.Rows)
            {
                sb.Append("        public " + dataRow["ToType"] + " " + dataRow["Name"] + " { get; set; }\n");
            }
            sb.Append("    }\n}\n");

            string filename = HttpUtility.UrlEncode(hidName.Value + ".cs", System.Text.Encoding.UTF8);

            string filePath = Server.MapPath("/Down/" + filename);//路径
            TxtWrite(sb.ToString(), filePath);
            //string fullPathUrl = Server.MapPath(filePath);//获取下载文件的路劲
            System.IO.FileInfo file = new System.IO.FileInfo(filePath);

            if (file.Exists)//判断文件是否存在
            {
                Response.Clear();
                Response.ClearHeaders();
                Response.Buffer = false;
                Response.AddHeader("content-disposition", "attachment;filename=" + file.Name);
                Response.AddHeader("cintent_length", "attachment;filename=" + HttpUtility.UrlDecode(file.Name));
                Response.AddHeader("cintent_length", file.Length.ToString());
                Response.ContentType = "application/octet-stream";
                Response.WriteFile(file.FullName);//通过response对象,执行下载操作
                Response.Flush();
                Response.End();

            }
        }

        protected void btnDownService_Click(object sender, EventArgs e)
        {
            //获取生成字段
            DataTable dt = JsonConvert.DeserializeObject<DataTable>(hidData.Value);
            StringBuilder sb = new StringBuilder();
            sb.Append("using System;\n");
            sb.Append("using System.Collections.Generic;\n");
            sb.Append("using System.Linq;\n");
            sb.Append("using System.Data;\n");
            sb.Append("using System.Data.SqlClient;\n");
            sb.Append("using System.Text;\n\n");
            sb.Append("namespace Your namespace\n{\n");
            sb.Append("    public class " + hidName.Value + "Service\n    {\n");

            #region 新增方法
            sb.Append("        public static int Add" + hidName.Value + "(" + hidName.Value + " " + hidName.Value + ", SqlConnection conn, SqlTransaction tran)\n");
            sb.Append("        {\n");
            sb.Append("            try\n");
            sb.Append("            {\n");
            sb.Append("                string sql = @\"INSERT INTO[dbo]." + hidName.Value + "(");
            string strField = "";
            foreach (DataRow dataRow in dt.Rows)
            {
                strField+=dataRow["Name"] + ",";
            }
            sb.Append((strField.Length > 1 ? strField.Substring(0, strField.Length - 1) : strField)+")");
            sb.Append("VALUES(");
            string strValue = "";
            foreach (DataRow dataRow in dt.Rows)
            {
                strValue += "@"+dataRow["Name"] + ",";
            }
            sb.Append((strValue.Length > 1 ? strValue.Substring(0, strValue.Length - 1) : strValue) + ")\";\n");
            sb.Append("                SqlParameter[] ps ={\n");
            string strParas = "";
            foreach (DataRow dataRow in dt.Rows)
            {
                strParas+="                new SqlParameter(\"@" + dataRow["Name"] + "\"," + hidName.Value + "." + dataRow["Name"] + "),\n";
            }

            strParas = strParas.Length > 1 ? strParas.Substring(0, strParas.Length - 2) : strParas;
            sb.Append(strParas+"\n");
            sb.Append("                                       };\n");
            sb.Append("                int ID= DBHelper.ExecuteScalar(sql + \"; SELECT @@identity AS 'ID'; \", conn, tran, ps);\n");
            sb.Append("                return ID;\n");
            sb.Append("            }\n");
            sb.Append("            catch\n");
            sb.Append("            {\n");
            sb.Append("                throw;\n");
            sb.Append("            }\n");
            sb.Append("        }\n");
            #endregion

            #region 修改方法
            sb.Append("        public static int Update"+ hidName.Value + "("+ hidName.Value + " "+ hidName.Value + ", SqlConnection conn, SqlTransaction tran)\n");
            sb.Append("        {\n");
            sb.Append("            try\n");
            sb.Append("            {\n");
            sb.Append("                string sql = @\"UPDATE[dbo].[" + hidName.Value + "]\n");
            sb.Append("                                            SET ");
            strField = "";
            foreach (DataRow dataRow in dt.Rows)
            {
                strField += dataRow["Name"] + "=@" + dataRow["Name"] + ",";
            }
            strField = strField.Length > 1 ? strField.Substring(0, strField.Length - 1) : strField;
            strField+= " WHERE id = @id \"; \n";
            sb.Append(strField);
            sb.Append("                SqlParameter[] ps ={\n");
            strParas = "";
            foreach (DataRow dataRow in dt.Rows)
            {
                strParas += "                new SqlParameter(\"@" + dataRow["Name"] + "\"," + hidName.Value + "." + dataRow["Name"] + "),\n";
            }
            strParas = strParas.Length > 1 ? strParas.Substring(0, strParas.Length - 2) : strParas;
            sb.Append(strParas+"\n");
            sb.Append("                                       };\n");
            sb.Append("                    return DBHelper.ExecuteCommand(sql, conn, tran, ps);\n");
            sb.Append("            }\n");
            sb.Append("            catch\n");
            sb.Append("            {\n");
            sb.Append("                throw;\n");
            sb.Append("            }\n");
            sb.Append("        }\n");
            #endregion

            #region 删除方法

            sb.Append("        public static int Delete"+ hidName.Value + "("+ hidName.Value + " "+ hidName.Value + ", SqlConnection conn, SqlTransaction tran)\n");
            sb.Append("        {\n");
            sb.Append("            try\n");
            sb.Append("            {\n");
            sb.Append("                string sql = \"Delete From "+ hidName.Value + " Where ID = @ID \";\n");
            sb.Append("                SqlParameter[] ps ={\n");
            sb.Append("                new SqlParameter(\"@ID\","+ hidName.Value + ".ID)};\n");
            sb.Append("                return DBHelper.ExecuteCommand(sql, conn, tran, ps);\n");
            sb.Append("            }\n");
            sb.Append("            catch\n");
            sb.Append("            {\n");
            sb.Append("                throw;\n");
            sb.Append("            }\n");
            sb.Append("        }\n");
            #endregion

            #region 查询方法

            sb.Append("        public static List<ProductSampling> GetProductSampling()\n");
            sb.Append("        {\n");
            sb.Append("            return GetProductSampling(\"select * from " + hidName.Value + "\", new SqlParameter[] { });\n");
            sb.Append("        }\n");


            sb.Append("        public static List<" + hidName.Value + "> Get" + hidName.Value + "(string sql, SqlParameter[] ps)\n");
            sb.Append("        {\n");
            sb.Append("            SqlConnection conn = DBHelper.GetConnection();\n");
            sb.Append("            SqlDataReader dr = DBHelper.GetReader(sql, conn, ps);\n");
            sb.Append("            List<" + hidName.Value + "> list = new List<" + hidName.Value + ">();\n");
            sb.Append("            while (dr.Read())\n");
            sb.Append("            {\n");
            sb.Append("                " + hidName.Value + " " + hidName.Value + " = new " + hidName.Value + "();\n");
            foreach (DataRow dr in dt.Rows)
            {
                string strName = dr["Name"].ToString();
                switch (dr["ToType"].ToString())
                {
                    case "String":
                        sb.Append("                " + hidName.Value + "." + strName + " = dr[\"" + strName + "\"] == DBNull.Value ? \"\" : dr[\"" + strName + "\"].ToString();\n");
                        break;
                    case "Int?":
                        sb.Append("                " + hidName.Value + "." + strName + " = dr[\"" + strName + "\"] == DBNull.Value ? (int?)null : (int?)dr[\"" + strName + "\"];\n");
                        break;
                    case "DateTime?":
                        sb.Append("                " + hidName.Value + "." + strName + " = dr[\"" + strName + "\"] == DBNull.Value ? (DateTime?)null : (DateTime?)dr[\"" + strName + "\"];\n");
                        break;
                }
            }
            sb.Append("                list.Add(" + hidName.Value + ");\n");
            sb.Append("            }\n");
            sb.Append("            if (conn.State == ConnectionState.Open)\n");
            sb.Append("                conn.Close();\n");
            sb.Append("            return list;\n");
            sb.Append("        }\n");


            #endregion

            sb.Append("    }\n}\n");

            string filename = HttpUtility.UrlEncode(hidName.Value + "Service.cs", System.Text.Encoding.UTF8);

            string filePath = Server.MapPath("/Down/" + filename);//路径
            TxtWrite(sb.ToString(), filePath);
            //string fullPathUrl = Server.MapPath(filePath);//获取下载文件的路劲
            System.IO.FileInfo file = new System.IO.FileInfo(filePath);

            if (file.Exists)//判断文件是否存在
            {
                Response.Clear();
                Response.ClearHeaders();
                Response.Buffer = false;
                Response.AddHeader("content-disposition", "attachment;filename=" + file.Name);
                Response.AddHeader("cintent_length", "attachment;filename=" + HttpUtility.UrlDecode(file.Name));
                Response.AddHeader("cintent_length", file.Length.ToString());
                Response.ContentType = "application/octet-stream";
                Response.WriteFile(file.FullName);//通过response对象,执行下载操作
                Response.Flush();
                Response.End();

            }
        }
    }
}
    class DataBases
    {
        public int id { get; set; }
        public string text { get; set; }
        public List<DataBase_children> children { get; set; }
    }
    class DataBase_children
    {
        public string id { get; set; }
        public string text { get; set; }
    }

DAL代码

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;

namespace Code_generation.DAL
{
    public class TableInfromation
    {
        /// <summary>
        /// 获取指定IP地址的数据库所有数据库实例名。
        /// </summary>
        /// <returns>返回包含数据实例名的列表。</returns>
        public static DataTable GetAllDataBase()
        {
            SqlConnection Connection = DBHelper.GetConnection();
            DataTable DBNameTable = new DataTable();
            SqlDataAdapter Adapter = new SqlDataAdapter("select name from master..sysdatabases  order by name", Connection);

            lock (Adapter)
            {
                Adapter.Fill(DBNameTable);
            }
            Connection.Close();
            return DBNameTable;
        }
        public static DataTable GetTableInfromation(string strDB,string strTableName)
        {
            SqlConnection Connection = DBHelper.GetConnection();
            DataTable DBNameTable = new DataTable();
            SqlDataAdapter Adapter = new SqlDataAdapter("use "+ strDB + "; SELECT COLUMN_NAME Name,DATA_TYPE Type,CHARACTER_MAXIMUM_LENGTH Length,case "
                                                            +@"when charindex('char', DATA_TYPE) > 0 then 'String'
                                                            when charindex('date', DATA_TYPE) > 0 then 'DateTime?'
                                                            when charindex('int', DATA_TYPE) > 0 then 'Int?'
                                                            end ToType  FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '"+ strTableName + "'", Connection);

            lock (Adapter)
            {
                Adapter.Fill(DBNameTable);
            }
            Connection.Close();
            return DBNameTable;
        }
    }
}

部署至IIS就可以一直使用了。

以上。
此外转成类型可以考虑做成下拉列表提供任意类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值