.Net MySql数据库简单的代码生成器

一、环境准备

VS2017 Enterprise、Winform

二、代码生成器的创建

1、使用VS 创建一个winform项目,命名为MySqlCode,然后从Nuget中搜索安装MySql.Data

2、创建一个App.config文件,配置数据库连接

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <!--数据库连接-->
    <add key="MySqlConnection" value="server=192.168.1.105;user id=dev;database=openauthdbtest;password=dev"/>
    <!--需要生成代码的数据库名称-->
    <add key="dbName" value="openauthdbtest"/>
  </appSettings>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
    </startup>
</configuration>

3、创建数据库帮助类MySqlHelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.Data;
using MySql.Data.MySqlClient;

namespace MySqlCode
{
    /// <summary>
    /// mysql帮助类
    /// </summary>
    public class MySqlHelper
    {
        private string connection = ConfigurationManager.AppSettings["MySqlConnection"].ToString();
        private string dbName = ConfigurationManager.AppSettings["dbName"].ToString();

        public MySqlHelper() { }

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="_connection">连接地址</param>
        /// <param name="_dbName">数据库名称</param>
        public MySqlHelper(string _connection, string _dbName)
        {
            connection = _connection;
            dbName = _dbName;
        }

        //MySqlHelper单实例
        private static MySqlHelper _instance = null;
        public static MySqlHelper Ins
        {
            get { if (_instance == null) { _instance = new MySqlHelper(); } return _instance; }
        }

        /// <summary>
        /// 获取数据表信息
        /// </summary>
        /// <returns></returns>
        public DataTable GetTableInfo()
        {
            //获取数据库中的数据表信息
            string sql = "Select table_name TableName ,TABLE_COMMENT TableRemark from INFORMATION_SCHEMA.TABLES Where table_schema = '"+dbName+ "' order by table_name";
            using (MySqlConnection con = new MySqlConnection(connection))
            {
                MySqlDataAdapter sqlda = new MySqlDataAdapter(sql, con);
                DataTable dt = new DataTable();
                sqlda.Fill(dt);
                return dt;
            }
        }


        /// <summary>
        /// 获取数据表字段信息
        /// </summary>
        /// <param name="tableName">数据库表名</param>
        /// <returns></returns>
        public DataTable GetColumnInfo(string tableName)
        {
            //获取数据库中的数据表字段信息
            string sql = "Select COLUMN_NAME,DATA_TYPE,COLUMN_COMMENT,IS_NULLABLE,COLUMN_KEY,COLUMN_DEFAULT from INFORMATION_SCHEMA.COLUMNS";
            sql += " Where table_name = '"+tableName+"' And table_schema = '"+dbName+"' ORDER BY ordinal_Position";
            using (MySqlConnection con = new MySqlConnection(connection))
            {
                MySqlDataAdapter sqlda = new MySqlDataAdapter(sql, con);
                DataTable dt = new DataTable();
                sqlda.Fill(dt);
                return dt;
            }
        }

        /// <summary>
        /// 需要获得多个结果集的时候用该方法,返回DataSet对象。
        /// </summary>
        /// <param name="sql语句"></param>
        /// <returns></returns>

        public DataSet ExecuteDataSet(string sql, params MySqlParameter[] paras)
        {
            using (MySqlConnection con = new MySqlConnection(connection))
            {
                //数据适配器
                MySqlDataAdapter sqlda = new MySqlDataAdapter(sql, con);
                sqlda.SelectCommand.Parameters.AddRange(paras);
                DataSet ds = new DataSet();
                sqlda.Fill(ds);
                return ds;
                //不需要打开和关闭链接.
            }
        }
        /// <summary>
        /// 获得单个结果集时使用该方法,返回DataTable对象。
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>

        public DataTable ExcuteDataTable(string sql, params MySqlParameter[] paras)
        {
            using (MySqlConnection con = new MySqlConnection(connection))
            {
                MySqlDataAdapter sqlda = new MySqlDataAdapter(sql, con);
                sqlda.SelectCommand.Parameters.AddRange(paras);
                DataTable dt = new DataTable();
                sqlda.Fill(dt);
                return dt;
            }
        }

        /// <summary>   
        /// 执行一条计算查询结果语句,返回查询结果(object)。   
        /// </summary>   
        /// <param name="SQLString">计算查询结果语句</param>   
        /// <returns>查询结果(object)</returns>   
        public object ExecuteScalar(string SQLString, params MySqlParameter[] paras)
        {
            using (MySqlConnection con = new MySqlConnection(connection))
            {
                using (MySqlCommand cmd = new MySqlCommand(SQLString, con))
                {
                    try
                    {
                        con.Open();
                        cmd.Parameters.AddRange(paras);
                        object obj = cmd.ExecuteScalar();
                        if ((Object.Equals(obj, null)) || (Object.Equals(obj, DBNull.Value)))
                        {
                            return null;
                        }
                        else
                        {
                            return obj;
                        }
                    }
                    catch (MySqlException e)
                    {
                        con.Close();
                        throw e;
                    }
                }
            }
        }

        /// <summary>
        /// 执行Update,Delete,Insert操作
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public int ExecuteNonquery(string sql, params MySqlParameter[] paras)
        {
            using (MySqlConnection con = new MySqlConnection(connection))
            {
                MySqlCommand cmd = new MySqlCommand(sql, con);
                cmd.Parameters.AddRange(paras);
                con.Open();
                return cmd.ExecuteNonQuery();
            }
        }

        /// <summary>
        /// 调用存储过程 无返回值
        /// </summary>
        /// <param name="procname">存储过程名</param>
        /// <param name="paras">sql语句中的参数数组</param>
        /// <returns></returns>
        public int ExecuteProcNonQuery(string procname, params MySqlParameter[] paras)
        {
            using (MySqlConnection con = new MySqlConnection(connection))
            {
                MySqlCommand cmd = new MySqlCommand(procname, con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddRange(paras);
                con.Open();
                return cmd.ExecuteNonQuery();
            }
        }

        /// <summary>
        /// 存储过程 返回Datatable
        /// </summary>
        /// <param name="procname"></param>
        /// <param name="paras"></param>
        /// <returns></returns>
        public DataTable ExecuteProcQuery(string procname, params MySqlParameter[] paras)
        {
            using (MySqlConnection con = new MySqlConnection(connection))
            {
                MySqlCommand cmd = new MySqlCommand(procname, con);
                cmd.CommandType = CommandType.StoredProcedure;
                MySqlDataAdapter sqlda = new MySqlDataAdapter(procname, con);
                sqlda.SelectCommand.Parameters.AddRange(paras);
                DataTable dt = new DataTable();
                sqlda.Fill(dt);
                return dt;
            }
        }

        /// <summary>
        /// 多语句的事物管理
        /// </summary>
        /// <param name="cmds">命令数组</param>
        /// <returns></returns>
        public bool ExcuteCommandByTran(params MySqlCommand[] cmds)
        {
            using (MySqlConnection con = new MySqlConnection(connection))
            {
                con.Open();
                MySqlTransaction tran = con.BeginTransaction();
                foreach (MySqlCommand cmd in cmds)
                {
                    cmd.Connection = con;
                    cmd.Transaction = tran;
                    cmd.ExecuteNonQuery();
                }
                tran.Commit();
                return true;
            }
        }

        /// <summary>
        /// 分页
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="totalCount"></param>
        /// <param name="paras"></param>
        /// <returns></returns>
        public DataTable ExcuteDataWithPage(string sql, ref int totalCount, params MySqlParameter[] paras)
        {
            using (MySqlConnection con = new MySqlConnection(connection))
            {
                MySqlDataAdapter dap = new MySqlDataAdapter(sql, con);
                DataTable dt = new DataTable();
                dap.SelectCommand.Parameters.AddRange(paras);
                dap.Fill(dt);
                MySqlParameter ttc = dap.SelectCommand.Parameters["@totalCount"];
                if (ttc != null)
                {
                    totalCount = Convert.ToInt32(ttc.Value);
                }
                return dt;
            }
        }
    }
}

4、调用 获取表信息以及表字段方法,解析字段信息,生成自己需要的代码

示例:

/// <summary>
        /// 生成代码
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void createCodeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DataTable dtColumns = MySqlHelper.Ins.GetColumnInfo(tablename);
            string upperTableName= FirstToUpper(tablename);
            string searchParmeter = "Query" + upperTableName + "ListReq";//查询条件实体
            string searchP = tablename + "Request";
            if (dtColumns.Rows.Count > 0)
            {
                #region Model
                StringBuilder requestCodeText = new StringBuilder();
                requestCodeText.Append("//*************************************************************************************************\r\n");
                requestCodeText.Append("//概要:" + tableRemark + "\r\n");
                requestCodeText.Append("//创建者  :LiWan\r\n");
                requestCodeText.Append("//创建日期:" + DateTime.Now.ToString("yyyy-MM-dd") + "\r\n");
                requestCodeText.Append("//更新履历:更新内容                      更新日                                            更新者:\r\n");
                requestCodeText.Append("//*************************************************************************************************\r\n");
                requestCodeText.Append("//UpdateRecord:\r\n");
                requestCodeText.Append("using System;\r\n");
                requestCodeText.Append("using System.Collections.Generic;\r\n");
                requestCodeText.Append("using System.Text;\r\n\r\n");
                requestCodeText.Append("namespace OpenAuth.App.Request\r\n");
                requestCodeText.Append("{\r\n");
                requestCodeText.Append("   /// <summary>\r\n");
                requestCodeText.Append("   /// " + tableRemark + "查询参数\r\n");
                requestCodeText.Append("   /// </summary>\r\n");
                requestCodeText.Append("  public  class " + searchParmeter + ":PageReq\r\n");
                requestCodeText.Append("  {\r\n");

                StringBuilder modelCodeText = new StringBuilder();//实体类代码
                modelCodeText.Append("//*************************************************************************************************\r\n");
                modelCodeText.Append("//概要:" + tableRemark + "\r\n");
                modelCodeText.Append("//创建者  :LiWan\r\n");
                modelCodeText.Append("//创建日期:" + DateTime.Now.ToString("yyyy-MM-dd") + "\r\n");
                modelCodeText.Append("//更新履历:更新内容                      更新日                                            更新者:\r\n");
                modelCodeText.Append("//*************************************************************************************************\r\n");
                modelCodeText.Append("//UpdateRecord:\r\n");
                modelCodeText.Append("using System;\r\n");
                modelCodeText.Append("using System.ComponentModel;\r\n");
                modelCodeText.Append("using System.ComponentModel.DataAnnotations.Schema;\r\n");
                modelCodeText.Append("using OpenAuth.Repository.Core;\r\n\r\n");
                modelCodeText.Append("namespace OpenAuth.Repository.Model\r\n");
                modelCodeText.Append("{\r\n");
                modelCodeText.Append("   /// <summary>\r\n");
                modelCodeText.Append("   /// "+tableRemark+"\r\n");
                modelCodeText.Append("   /// </summary>\r\n");
                modelCodeText.Append("  [Table("+"\""+upperTableName +"\""+ ")]\r\n");
                modelCodeText.Append("  public partial class " + upperTableName + ":Entity\r\n");
                modelCodeText.Append("  {\r\n");
                foreach(DataRow dr in dtColumns.Rows)
                {
                    string columnName = dr["COLUMN_NAME"].ToString();//字段名称
                    string dataType= dr["DATA_TYPE"].ToString();//数据类型
                    string columnRemark= dr["COLUMN_COMMENT"].ToString(); //字段备注
                    string isNotNull= dr["IS_NULLABLE"].ToString(); //是否可为空
                    string isKey = dr["COLUMN_KEY"].ToString();//是否主键判断
                    string defaultValue= dr["COLUMN_DEFAULT"].ToString();//默认值
                    if (columnName != "Id"&& columnName != "CreateTime" && columnName != "CreateUser" && columnName != "CreateUserName" && columnName != "ModifyTime" && columnName != "ModifyUser"&& columnName != "ModifyUserName")
                    {                        
                        modelCodeText.Append("     /// <summary>\r\n");
                        modelCodeText.Append("     /// "+columnRemark+"\r\n");
                        modelCodeText.Append("     /// </summary>\r\n");
                        modelCodeText.Append("     [Description("+"\""+columnRemark+"\""+")]\r\n");
                        if (dataType == "varchar"||dataType=="text"||dataType=="longtext"|| dataType == "char"|| dataType == "tinytext" || dataType == "mediumtext")
                        {
                            requestCodeText.Append("     /// <summary>\r\n");
                            requestCodeText.Append("     /// " + columnRemark + "\r\n");
                            requestCodeText.Append("     /// </summary>\r\n");
                            requestCodeText.Append("     public string " + columnName + " {get;set;}\r\n");

                            modelCodeText.Append("     public string " + columnName + " {get;set;}=string.Empty;\r\n");                            
                        }
                        if (dataType == "int"|| dataType == "tinyint"|| dataType == "interger" || dataType == "smallint"|| dataType == "mediumint" || dataType == "bigint")
                        {
                            if (isNotNull == "YES")
                            {
                                modelCodeText.Append("     public int " + columnName + " {get;set;}\r\n");
                            }
                            else
                            {
                                modelCodeText.Append("     public ?int " + columnName + " {get;set;}\r\n");
                            }
                        }
                        if (dataType == "float")
                        {
                            if (isNotNull == "YES")
                            {
                                modelCodeText.Append("     public float " + columnName + " {get;set;}\r\n");
                            }
                            else
                            {
                                modelCodeText.Append("     public ?float " + columnName + " {get;set;}\r\n");
                            }
                        }
                        if (dataType == "double")
                        {
                            if (isNotNull == "YES")
                            {
                                modelCodeText.Append("     public double " + columnName + " {get;set;}\r\n");
                            }
                            else
                            {
                                modelCodeText.Append("     public ?double " + columnName + " {get;set;}\r\n");
                            }
                        }
                        if (dataType == "decimal")
                        {
                            if (isNotNull == "YES")
                            {
                                modelCodeText.Append("     public decimal " + columnName + " {get;set;}\r\n");
                            }
                            else
                            {
                                modelCodeText.Append("     public ?decimal " + columnName + " {get;set;}\r\n");
                            }
                        }
                        if (dataType== "datetime"|| dataType == "date")
                        {
                            if (isNotNull == "YES")
                            {
                                modelCodeText.Append("     public DateTime " + columnName + " {get;set;}\r\n");
                            }
                            else
                            {
                                modelCodeText.Append("     public ?DateTime " + columnName + " {get;set;}\r\n");
                            }
                        }
                    }
                }
                modelCodeText.Append("  }\r\n");
                modelCodeText.Append("}");
                txtModelCode.Text = modelCodeText.ToString();
                requestCodeText.Append("  }\r\n");
                requestCodeText.Append("}");
                txtRequestCode.Text = requestCodeText.ToString();
                #endregion

                #region DAL
                StringBuilder dalCodeText = new StringBuilder();//dal代码
                dalCodeText.Append("//*************************************************************************************************\r\n");
                dalCodeText.Append("//概要:" + tableRemark + "\r\n");
                dalCodeText.Append("//创建者  :LiWan\r\n");
                dalCodeText.Append("//创建日期:" + DateTime.Now.ToString("yyyy-MM-dd") + "\r\n");
                dalCodeText.Append("//更新履历:更新内容                      更新日                                            更新者:\r\n");
                dalCodeText.Append("//*************************************************************************************************\r\n");
                dalCodeText.Append("//UpdateRecord:\r\n");
                dalCodeText.Append("using System;\r\n");
                dalCodeText.Append("using System.Collections.Generic;\r\n");
                dalCodeText.Append("using System.Text;\r\n");
                dalCodeText.Append("using System.Linq;\r\n");
                dalCodeText.Append("using System.Linq.Expressions;\r\n");
                dalCodeText.Append("using Infrastructure;\r\n");
                dalCodeText.Append("using OpenAuth.App.Interface;\r\n");
                dalCodeText.Append("using OpenAuth.App.Request;\r\n");
                dalCodeText.Append("using OpenAuth.App.Response;\r\n");
                dalCodeText.Append("using OpenAuth.Repository.Model;\r\n");
                dalCodeText.Append("using OpenAuth.Repository.Interface;\r\n\r\n");
                dalCodeText.Append("namespace OpenAuth.App\r\n");
                dalCodeText.Append("{\r\n");
                dalCodeText.Append("  /// <summary>\r\n");
                dalCodeText.Append("  /// " + tableRemark + "数据层\r\n");
                dalCodeText.Append("  /// </summary>\r\n");
                dalCodeText.Append("  public  class " + upperTableName + "App:BaseApp<"+ upperTableName + ">\r\n");
                dalCodeText.Append("  {\r\n");
                dalCodeText.Append("    private IAuth _auth;\r\n");
                dalCodeText.Append("    /// <summary>\r\n");
                dalCodeText.Append("    /// 构造函数\r\n");
                dalCodeText.Append("    /// </summary>\r\n");
                dalCodeText.Append("    /// <param name=\"unitWork\"></param>\r\n");
                dalCodeText.Append("    /// <param name=\"repository\"></param>\r\n");
                dalCodeText.Append("    /// <param name=\"auth\"></param>\r\n");
                dalCodeText.Append("    public "+ upperTableName + "App(IUnitWork unitWork, IRepository<"+ upperTableName + "> repository, IAuth auth) : base(unitWork, repository)\r\n");
                dalCodeText.Append("    {\r\n");
                dalCodeText.Append("      _auth = auth;\r\n");
                dalCodeText.Append("    }\r\n");
                dalCodeText.Append("    /// <summary>\r\n");
                dalCodeText.Append("    /// 新增\r\n");
                dalCodeText.Append("    /// </summary>\r\n");
                dalCodeText.Append("    /// <param name=\""+tablename+"\"></param>\r\n");
                dalCodeText.Append("    public void Add("+ upperTableName + " "+tablename+")\r\n");
                dalCodeText.Append("    {\r\n");
                dalCodeText.Append("      var loginContent = _auth.GetCurrentUser();\r\n");
                dalCodeText.Append("      "+tablename+"."+ "CreateTime = DateTime.Now;\r\n");
                dalCodeText.Append("      "+tablename + "." + "CreateUser = loginContent.User.Id.ToString();\r\n");
                dalCodeText.Append("      "+tablename + "." + "CreateUserName = loginContent.User.UserName.ToString();\r\n");
                dalCodeText.Append("      Repository.Add("+ tablename+ ");\r\n");
                dalCodeText.Append("    }\r\n");
                dalCodeText.Append("    /// <summary>\r\n");
                dalCodeText.Append("    /// 修改\r\n");
                dalCodeText.Append("    /// </summary>\r\n");
                dalCodeText.Append("    /// <param name=\"" + tablename + "\"></param>\r\n");
                dalCodeText.Append("    public void Update(" + upperTableName + " " + tablename + ")\r\n");
                dalCodeText.Append("    {\r\n");
                dalCodeText.Append("      var loginContent = _auth.GetCurrentUser();\r\n");
                dalCodeText.Append("      var model = Repository.FindSingle(x=>x.Id.Equals("+ tablename + ".Id));\r\n");
                dalCodeText.Append("      " + tablename + "." + "CreateTime = model.CreateTime;\r\n");
                dalCodeText.Append("      " + tablename + "." + "CreateUser = model.CreateUser;\r\n");
                dalCodeText.Append("      " + tablename + "." + "CreateUserName = model.CreateUserName;\r\n");
                dalCodeText.Append("      " + tablename + "." + "ModifyTime = DateTime.Now;\r\n");
                dalCodeText.Append("      " + tablename + "." + "ModifyUser = loginContent.User.Id.ToString();\r\n");
                dalCodeText.Append("      " + tablename + "." + "ModifyUserName =loginContent.User.UserName.ToString();\r\n");
                dalCodeText.Append("      Repository.Update(" + tablename + ");\r\n");
                dalCodeText.Append("    }\r\n");
                dalCodeText.Append("    /// <summary>\r\n");
                dalCodeText.Append("    /// 根据Id获取数据\r\n");
                dalCodeText.Append("    /// </summary>\r\n");
                dalCodeText.Append("    /// <param name=\"" + tablename + "\"></param>\r\n");
                dalCodeText.Append("    public "+ upperTableName + " GetByID(string Id)\r\n");
                dalCodeText.Append("    {\r\n");
                dalCodeText.Append("      return Repository.FindSingle(x=>x.Id.Equals(Id));\r\n");
                dalCodeText.Append("    }\r\n");
                dalCodeText.Append("    /// <summary>\r\n");
                dalCodeText.Append("    /// 获取数据\r\n");
                dalCodeText.Append("    /// </summary>\r\n");
                dalCodeText.Append("    /// <returns></returns>\r\n");
                dalCodeText.Append("    public TableData GetList()\r\n");
                dalCodeText.Append("    {\r\n");
                dalCodeText.Append("      var loginContent = _auth.GetCurrentUser();\r\n");
                dalCodeText.Append("      if (loginContent == null)\r\n");
                dalCodeText.Append("      {\r\n");
                dalCodeText.Append("        throw new CommonException(\"登录已过期\", Define.INVALID_TOKEN);\r\n");
                dalCodeText.Append("      }\r\n");
                dalCodeText.Append("      //var properties = loginContent.GetProperties(" + "\""+ upperTableName +"\""+ ");\r\n");
                dalCodeText.Append("      //if (properties == null || properties.Count == 0)\r\n");
                dalCodeText.Append("      //{\r\n");
                dalCodeText.Append("        //throw new Exception(\"当前登录用户没有访问该模块字段的权限,请联系管理员配置\");\r\n");
                dalCodeText.Append("      //}\r\n");
                dalCodeText.Append("      var result = new TableData();\r\n");
                dalCodeText.Append("      var dataList = Repository.Find(null);\r\n");
                dalCodeText.Append("      result.columnHeaders = properties;\r\n");
                dalCodeText.Append("      result.data = dataList.ToList();\r\n");
                dalCodeText.Append("      result.count = dataList.Count();\r\n");
                dalCodeText.Append("      return result;\r\n");
                dalCodeText.Append("    }\r\n");
                dalCodeText.Append("    /// <summary>\r\n");
                dalCodeText.Append("    /// 获取分页数据\r\n");
                dalCodeText.Append("    /// </summary>\r\n");
                dalCodeText.Append("    /// <returns></returns>\r\n");               
                dalCodeText.Append("    public TableData GetPageList("+ searchParmeter+ " "+searchP+")\r\n");
                dalCodeText.Append("    {\r\n");
                dalCodeText.Append("      var loginContent = _auth.GetCurrentUser();\r\n");
                dalCodeText.Append("      if (loginContent == null)\r\n");
                dalCodeText.Append("      {\r\n");
                dalCodeText.Append("        throw new CommonException(\"登录已过期\", Define.INVALID_TOKEN);\r\n");
                dalCodeText.Append("      }\r\n");
                dalCodeText.Append("      //var properties = loginContent.GetProperties(" + "\"" + upperTableName +"\"" +");\r\n");
                dalCodeText.Append("      //if (properties == null || properties.Count == 0)\r\n");
                dalCodeText.Append("      //{\r\n");
                dalCodeText.Append("        //throw new Exception(\"当前登录用户没有访问该模块字段的权限,请联系管理员配置\");\r\n");
                dalCodeText.Append("      //}\r\n");
                dalCodeText.Append("      Expression<Func<"+ upperTableName + ", bool>> predicate =x=>true;\r\n");
                dalCodeText.Append("      var dataList = Repository.Find("+ searchP+".page,"+ searchP+".limit, \"CreateTime descending\", predicate);\r\n");
                dalCodeText.Append("      var result = new TableData();\r\n");
                dalCodeText.Append("      result.columnHeaders = properties;\r\n");
                dalCodeText.Append("      result.data = dataList.ToList();\r\n");
                dalCodeText.Append("      result.count = Repository.GetCount(predicate);\r\n");
                dalCodeText.Append("      return result;\r\n");
                dalCodeText.Append("    }\r\n");
                dalCodeText.Append("  }\r\n");
                dalCodeText.Append("}");
                txtDalCode.Text = dalCodeText.ToString();
                #endregion

                #region Controller
                #endregion

                #region Index
                #endregion

                #region Edit
                #endregion

            }
        }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值