代码生成器的实例

本文介绍了一个基于C#的应用程序,该程序能够连接到SQL Server数据库,执行存储过程来获取数据库中的表名、列名等信息,并进一步生成对应的实体类及集合类代码。

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

 using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
    public SqlConnection  m_Scon = new SqlConnection();
    public  DataSet  m_DS = new DataSet();
    private void Page_Load(object sender, System.EventArgs e)
    {
      SqlConnection  m_Scon = new SqlConnection();
      DataSet  m_DS = new DataSet();
    }

    #region Web Form Designer generated code
    //[STAThreadAttribute]
    override protected void OnInit(EventArgs e)
    {
        //
        // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
        //
        InitializeComponent();
        base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
        this.Button1.Click += new System.EventHandler(this.Button1_Click);
        this.DropDownList1.SelectedIndexChanged += new System.EventHandler(this.DropDownList1_SelectedIndexChanged);
        this.Button2.Click += new System.EventHandler(this.Button2_Click);
        this.Button3.Click += new System.EventHandler(this.Button3_Click);
        this.Button4.Click += new System.EventHandler(this.Button4_Click);
        this.Button5.Click += new System.EventHandler(this.Button5_Click);
        this.Button6.Click += new System.EventHandler(this.Button6_Click);
        this.Load += new System.EventHandler(this.Page_Load);

    }
    #endregion

    #region 显示数据库的表 Button1_Click
    /// <summary>
    /// 显示数据库的表
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Button1_Click(object sender, System.EventArgs e)
    {
        try
        {
            m_Scon.ConnectionString = "user id=" + this.txtUserName.Text +
                ";password=" + this.txtPassword.Text +
                ";initial catalog=" + this.DropDownList3.SelectedItem.Text +
                ";data source=" + this.txtServerName.Text;
            SqlCommand m_Scmd = new SqlCommand("sp_tables", m_Scon);
            m_Scmd.CommandType = CommandType.StoredProcedure;
            SqlParameter myParm = m_Scmd.Parameters.Add("@table_type", SqlDbType.VarChar, 100);
            myParm.Value = "'TABLE'";
            m_Scon.Open();
            SqlDataReader m_Sdr = m_Scmd.ExecuteReader();
            this.DropDownList1.Items.Clear();
            while (m_Sdr.Read())
            {
                if (m_Sdr["TABLE_NAME"].ToString() != "dtproperties")
                {
                    ListItem m_LI = new ListItem();
                    m_LI.Text = m_Sdr["TABLE_NAME"].ToString();
                    m_LI.Value = m_Sdr["TABLE_NAME"].ToString();
                    this.DropDownList1.Items.Add(m_LI);
                }
            }
            m_Sdr.Close();
            m_Scon.Close();
        }
        catch
        {
            if (m_Scon.State.ToString().ToUpper() == "OPEN")
            {
                m_Scon.Close();
            }
        }
    }

    #endregion

    #region Show Columns in a table DropDownList1_SelectedIndexChanged
    /// <summary>
    /// 显示表的所有列
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
        try
        {
            if (this.DropDownList1.SelectedIndex != -1)
            {
                m_Scon.ConnectionString = "user id=" + this.txtUserName.Text +
                    ";password=" + this.txtPassword.Text +
                    ";initial catalog=" + this.DropDownList3.SelectedItem.Text +
                    ";data source=" + this.txtServerName.Text;
                SqlCommand m_Scmd = new SqlCommand("sp_columns", m_Scon);
                m_Scmd.CommandType = CommandType.StoredProcedure;
                SqlParameter myParm = m_Scmd.Parameters.Add("@table_name", SqlDbType.VarChar, 100);
                myParm.Value = this.DropDownList1.SelectedItem.Value;
                m_Scon.Open();
                SqlDataReader m_Sdr = m_Scmd.ExecuteReader();
                this.DropDownList2.Items.Clear();
                while (m_Sdr.Read())
                {
                    ListItem m_LI = new ListItem();
                    m_LI.Text = m_Sdr["COLUMN_NAME"].ToString();
                    m_LI.Value = m_Sdr["COLUMN_NAME"].ToString();
                    this.DropDownList2.Items.Add(m_LI);
                }
                m_Sdr.Close();
                m_Scon.Close();
            }
        }
        catch
        {
            if (m_Scon.State.ToString().ToUpper() == "OPEN")
            {
                m_Scon.Close();
            }
        }
    }

    #endregion

    #region Show All DataBase Button2_Click
    /// <summary>
    /// 显示所有数据库
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Button2_Click(object sender, System.EventArgs e)
    {
        try
        {
            m_Scon.ConnectionString = "user id=" + this.txtUserName.Text +
                ";password=" + this.txtPassword.Text +
                ";data source=" + this.txtServerName.Text;
            SqlCommand m_Scmd = new SqlCommand("sp_databases", m_Scon);
            m_Scmd.CommandType = CommandType.StoredProcedure;
            m_Scon.Open();
            SqlDataReader m_Sdr = m_Scmd.ExecuteReader();
            this.DropDownList1.Items.Clear();
            while (m_Sdr.Read())
            {
                ListItem m_LI = new ListItem();
                m_LI.Text = m_Sdr["DATABASE_NAME"].ToString();
                m_LI.Value = m_Sdr["DATABASE_NAME"].ToString();
                this.DropDownList3.Items.Add(m_LI);
            }
            m_Sdr.Close();
            m_Scon.Close();
        }
        catch
        {
            if (m_Scon.State.ToString().ToUpper() == "OPEN")
            {
                m_Scon.Close();
            }
        }
    }

    #endregion

    #region Make Form
    /// <summary>
    /// 生成表单项
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Button3_Click(object sender, System.EventArgs e)
    {
        if (this.DropDownList1.SelectedIndex != -1)
        {
            m_Scon.ConnectionString = "user id=" + this.txtUserName.Text +
                ";password=" + this.txtPassword.Text +
                ";initial catalog=" + this.DropDownList3.SelectedItem.Text +
                ";data source=" + this.txtServerName.Text;
            SqlCommand m_Scmd = new SqlCommand("sp_columns", m_Scon);
            m_Scmd.CommandType = CommandType.StoredProcedure;
            SqlParameter myParm = m_Scmd.Parameters.Add("@table_name", SqlDbType.VarChar, 100);
            myParm.Value = this.DropDownList1.SelectedItem.Value;
            m_Scon.Open();
            SqlDataReader m_Sdr = m_Scmd.ExecuteReader();
            string ColName = "";
            string ColType = "";
            while (m_Sdr.Read())
            {
                ColName = m_Sdr["COLUMN_NAME"].ToString();
                ColType = m_Sdr["TYPE_NAME"].ToString();
            }
            m_Sdr.Close();
            m_Scon.Close();
        }
    }
    #endregion

    #region Make object
    /// <summary>
    /// 生成实体
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Button4_Click(object sender, System.EventArgs e)
    {
        if (this.DropDownList1.SelectedIndex != -1)
        {
            m_Scon.ConnectionString = "user id=" + this.txtUserName.Text +
                ";password=" + this.txtPassword.Text +
                ";initial catalog=" + this.DropDownList3.SelectedItem.Text +
                ";data source=" + this.txtServerName.Text;
            SqlCommand m_Scmd = new SqlCommand("sp_columns", m_Scon);
            m_Scmd.CommandType = CommandType.StoredProcedure;
            SqlParameter myParm = m_Scmd.Parameters.Add("@table_name", SqlDbType.VarChar, 100);
            myParm.Value = this.DropDownList1.SelectedItem.Value;
            m_Scon.Open();
            SqlDataReader m_Sdr = m_Scmd.ExecuteReader();
            string TableName = this.DropDownList1.SelectedItem.Value;
            string m_LayOut = "";

            m_LayOut = m_LayOut + "using System;/r/n";
            m_LayOut = m_LayOut + "using System.Data;/r/n";
            m_LayOut = m_LayOut + "using System.Data.SqlClient;/r/n";
            m_LayOut = m_LayOut + "/r/n";
            m_LayOut = m_LayOut + "namespace OceanSoft/r/n";
            m_LayOut = m_LayOut + "{/r/n";

            m_LayOut = m_LayOut + BL(4) + "///<comment>/r/n";
            m_LayOut = m_LayOut + BL(4) + "////r/n";
            m_LayOut = m_LayOut + BL(4) + "///</comment>/r/n";

            string ColName = "";     //列名
            string ColType = "";     //列的数据类型
            string ColDefine = "";   //列定义
            string ColProperty = ""; //列属性
            while (m_Sdr.Read())
            {
                ColName = m_Sdr["COLUMN_NAME"].ToString();
                ColType = GT(m_Sdr["TYPE_NAME"].ToString());

                ColDefine = ColDefine + BL(8) + "private " + ColType + " m_" + ColName + ";/r/n";

                ColProperty = ColProperty + BL(8) + "/r/n";
                ColProperty = ColProperty + BL(8) + "public " + ColType + " " + ColName + "/r/n";
                ColProperty = ColProperty + BL(8) + "{/r/n";
                ColProperty = ColProperty + BL(12) + "get/r/n";
                ColProperty = ColProperty + BL(12) + "{/r/n";
                ColProperty = ColProperty + BL(16) + "return m_" + ColName + " ;/r/n";
                ColProperty = ColProperty + BL(12) + "}/r/n";
                ColProperty = ColProperty + BL(12) + "set/r/n";
                ColProperty = ColProperty + BL(12) + "{/r/n";
                ColProperty = ColProperty + BL(16) + "m_" + ColName + " = value ;/r/n";
                ColProperty = ColProperty + BL(12) + "}/r/n";
                ColProperty = ColProperty + BL(8) + "}/r/n";

            }
            m_Sdr.Close();
            m_Scon.Close();

            m_LayOut = m_LayOut + BL(4) + "public class " + TableName + "/r/n";
            m_LayOut = m_LayOut + BL(4) + "{/r/n";

            m_LayOut = m_LayOut + BL(4) + "/r/n";
            m_LayOut = m_LayOut + ColDefine;  //定义

            m_LayOut = m_LayOut + BL(8) + "///<summary>/r/n";
            m_LayOut = m_LayOut + BL(8) + "///构造函数/r/n";
            m_LayOut = m_LayOut + BL(8) + "///<summary>/r/n";
            m_LayOut = m_LayOut + BL(8) + "public " + TableName + "()/r/n";  //构造函数
            m_LayOut = m_LayOut + BL(8) + "{/r/n";
            m_LayOut = m_LayOut + BL(8) + "}/r/n/r/n";

            m_LayOut = m_LayOut + BL(8) + "///<summary>/r/n";
            m_LayOut = m_LayOut + BL(8) + "///析构函数/r/n";
            m_LayOut = m_LayOut + BL(8) + "///<summary>/r/n";
            m_LayOut = m_LayOut + BL(8) + "~" + TableName + "()/r/n";  //析构函数
            m_LayOut = m_LayOut + BL(8) + "{/r/n";
            m_LayOut = m_LayOut + BL(8) + "}/r/n";

            m_LayOut = m_LayOut + ColProperty;  //实体属性

            m_LayOut = m_LayOut + BL(4) + "}/r/n";

            m_LayOut = m_LayOut + "}/r/n";

            this.txtLayOut.Text = m_LayOut;
        }
    }
    #endregion

    #region Test
    private void Button5_Click(object sender, System.EventArgs e)
    {
        //
    }
    #endregion

    #region Functions
    private string BL(int values)
    {
        switch (values)
        {
        case 4:
        return "/t";
        case 8:
        return "/t/t";
        case 12:
        return "/t/t/t";
        case 16:
        return "/t/t/t/t";
        case 20:
        return "/t/t/t/t/t";
        }
        return "";
    }

    private string GT(string Values)
    {
        switch (Values.ToUpper())
        {
        case "INT":
        return "int";
        case "NVARCHAR":
        return "string";
        case "TINYINT":
        return "int";
        case "INT IDENTITY":
        return "int";
        case "BIT":
        return "int";
        case "UNIQUEIDENTIFIER":
        return "string";
        case "DATETIME":
        return "string";
        case "VARCHAR":
        return "string";
        default:
        return "string";
        }
    }
    #endregion

    #region Make Object Collection Class
    private void Button6_Click(object sender, System.EventArgs e)
    {
        if (this.DropDownList1.SelectedIndex != -1)
        {
            string TableName = this.DropDownList1.SelectedItem.Value;
            string m_LayOut = "";

            m_LayOut = m_LayOut + "using System;/r/n";
            m_LayOut = m_LayOut + "using System.Data;/r/n";
            m_LayOut = m_LayOut + "using System.Data.SqlClient;/r/n";
            m_LayOut = m_LayOut + "using System.Collections;/r/n";
            m_LayOut = m_LayOut + "/r/n";

            m_LayOut = m_LayOut + "namespace e3.Pantheon.WorkFlow.Structure/r/n";
            m_LayOut = m_LayOut + "{/r/n";

            m_LayOut = m_LayOut + BL(4) + "///<comment>/r/n";
            m_LayOut = m_LayOut + BL(4) + "///公司名称:苏州中软公司/r/n";
            m_LayOut = m_LayOut + BL(4) + "///作者:/r/n";
            m_LayOut = m_LayOut + BL(4) + "///创建日期:" + System.DateTime.Now.ToShortDateString() + "/r/n";
            m_LayOut = m_LayOut + BL(4) + "///用途说明:/r/n";
            m_LayOut = m_LayOut + BL(4) + "///修改记录:/r/n";
            m_LayOut = m_LayOut + BL(4) + "///</comment>/r/n";

            m_LayOut = m_LayOut + BL(4) + "public class " + TableName + "s : System.Collections.CollectionBase/r/n";
            m_LayOut = m_LayOut + BL(4) + "{/r/n";

            m_LayOut = m_LayOut + BL(8) + "///<summary>/r/n";
            m_LayOut = m_LayOut + BL(8) + "///构造函数/r/n";
            m_LayOut = m_LayOut + BL(8) + "///<summary>/r/n";
            m_LayOut = m_LayOut + BL(8) + "public " + TableName + "s()/r/n";  //构造函数
            m_LayOut = m_LayOut + BL(8) + "{/r/n";
            m_LayOut = m_LayOut + BL(12) + "//TODO:在这里增加构造函数逻辑/r/n";
            m_LayOut = m_LayOut + BL(8) + "}/r/n/r/n";

            m_LayOut = m_LayOut + BL(8) + "///<summary>/r/n";
            m_LayOut = m_LayOut + BL(8) + "///析构函数/r/n";
            m_LayOut = m_LayOut + BL(8) + "///<summary>/r/n";
            m_LayOut = m_LayOut + BL(8) + "~" + TableName + "s()/r/n";  //析构函数
            m_LayOut = m_LayOut + BL(8) + "{/r/n";
            m_LayOut = m_LayOut + BL(12) + "//TODO:在这里增加析构函数逻辑/r/n";
            m_LayOut = m_LayOut + BL(8) + "}/r/n/r/n";

            m_LayOut = m_LayOut + BL(8) + "public void Remove(int index)/r/n";   //删除
            m_LayOut = m_LayOut + BL(8) + "{/r/n";
            m_LayOut = m_LayOut + BL(12) + "if(index>Counter-1||Counter<0)/r/n";
            m_LayOut = m_LayOut + BL(12) + "{}/r/n";
            m_LayOut = m_LayOut + BL(12) + "else/r/n";
            m_LayOut = m_LayOut + BL(12) + "{/r/n";
            m_LayOut = m_LayOut + BL(16) + "List.RemoveAt(index);/r/n";
            m_LayOut = m_LayOut + BL(12) + "}/r/n";
            m_LayOut = m_LayOut + BL(8) + "}/r/n/r/n";

            m_LayOut = m_LayOut + BL(8) + "public void Add(" + TableName + " m_" + TableName + ")/r/n";  //增加
            m_LayOut = m_LayOut + BL(8) + "{/r/n";
            m_LayOut = m_LayOut + BL(12) + "List.Add(" + " m_" + TableName + ");/r/n";
            m_LayOut = m_LayOut + BL(8) + "}/r/n/r/n";

            m_LayOut = m_LayOut + BL(8) + "public " + TableName + " this[int index]/r/n";  //集合的元素
            m_LayOut = m_LayOut + BL(8) + "{/r/n";

            m_LayOut = m_LayOut + BL(12) + "get/r/n";
            m_LayOut = m_LayOut + BL(12) + "{/r/n";
            m_LayOut = m_LayOut + BL(16) + "if(index <List.Count)/r/n";
            m_LayOut = m_LayOut + BL(16) + "{/r/n";
            m_LayOut = m_LayOut + BL(20) + "return (" + TableName + ")List[Index];/r/n";
            m_LayOut = m_LayOut + BL(16) + "}/r/n";
            m_LayOut = m_LayOut + BL(16) + "else/r/n";
            m_LayOut = m_LayOut + BL(16) + "{/r/n";
            m_LayOut = m_LayOut + BL(16) + "return null;/r/n";
            m_LayOut = m_LayOut + BL(16) + "}/r/n";
            m_LayOut = m_LayOut + BL(12) + "}/r/n";

            m_LayOut = m_LayOut + BL(12) + "set/r/n";
            m_LayOut = m_LayOut + BL(12) + "{/r/n";
            m_LayOut = m_LayOut + BL(16) + "if(iIndex<List.Count)/r/n";
            m_LayOut = m_LayOut + BL(16) + "{/r/n";
            m_LayOut = m_LayOut + BL(20) + "List[index]=value;/r/n";
            m_LayOut = m_LayOut + BL(16) + "}/r/n";
            m_LayOut = m_LayOut + BL(12) + "}/r/n";

            m_LayOut = m_LayOut + BL(8) + "}/r/n";

            m_LayOut = m_LayOut + BL(4) + "}/r/n";  //class

            m_LayOut = m_LayOut + "}/r/n";  //namespace

            this.txtLayOut.Text = m_LayOut;
        }
    }
    #endregion
}
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head>
    <title>FrmMain</title>
    <meta name="GENERATOR" content="Microsoft Visual Studio 7.0">
    <meta name="CODE_LANGUAGE" content="C#">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</head>
<body ms_positioning="GridLayout">
    <form id="FrmMain" method="post" runat="server">
        <asp:TextBox ID="txtServerName" Style="z-index: 101; left: 116px; position: absolute;
            top: 24px; design_time_lock: True" runat="server" Font-Size="10pt" Design_Time_Lock="True">192.168.0.220</asp:TextBox>
        <asp:Label ID="Label7" Style="z-index: 112; left: 24px; position: absolute; top: 98px;
            design_time_lock: True" runat="server" Width="79px" Height="20px" Font-Size="10pt"
            Design_Time_Lock="True">数据库列表</asp:Label>
        <asp:Label ID="Label6" Style="z-index: 111; left: 27px; position: absolute; top: 169px;
            design_time_lock: True" runat="server" Width="53px" Height="20px" Font-Size="10pt"
            Design_Time_Lock="True" Visible="False">字段名</asp:Label>
        <asp:Label ID="Label5" Style="z-index: 109; left: 27px; position: absolute; top: 135px;
            design_time_lock: True" runat="server" Width="53px" Height="20px" Font-Size="10pt"
            Design_Time_Lock="True">表名</asp:Label>
        <asp:Button ID="Button1" Style="z-index: 107; left: 496px; position: absolute; top: 91px;
            design_time_lock: True" runat="server" Width="102px" Text="GetTable" Font-Size="10pt"
            Design_Time_Lock="True"></asp:Button>
        <asp:Label ID="Label4" Style="z-index: 106; left: 288px; position: absolute; top: 63px;
            design_time_lock: True" runat="server" Width="79px" Height="20px" Font-Size="10pt"
            Design_Time_Lock="True">密码</asp:Label>
        <asp:Label ID="Label2" Style="z-index: 105; left: 25px; position: absolute; top: 61px;
            design_time_lock: True" runat="server" Width="79px" Height="20px" Font-Size="10pt"
            Design_Time_Lock="True">用户名</asp:Label>
        <asp:Label ID="Label1" Style="z-index: 104; left: 25px; position: absolute; top: 28px;
            design_time_lock: True" runat="server" Width="79px" Height="20px" Font-Size="10pt"
            Design_Time_Lock="True">服务器名</asp:Label>
        <asp:TextBox ID="txtPassword" Style="z-index: 103; left: 376px; position: absolute;
            top: 60px; design_time_lock: True" runat="server" Font-Size="10pt" BackColor="Transparent"
            ForeColor="Black" BorderColor="White" Design_Time_Lock="True"></asp:TextBox>
        <asp:TextBox ID="txtUserName" Style="z-index: 102; left: 116px; position: absolute;
            top: 62px; design_time_lock: True" runat="server" Font-Size="10pt" Design_Time_Lock="True">sa</asp:TextBox>
        <asp:DropDownList ID="DropDownList1" Style="z-index: 108; left: 115px; position: absolute;
            top: 135px; design_time_lock: True" runat="server" Width="208px" AutoPostBack="True"
            Font-Size="10pt" Design_Time_Lock="True">
        </asp:DropDownList>
        <asp:DropDownList ID="DropDownList2" Style="z-index: 110; left: 115px; position: absolute;
            top: 171px; design_time_lock: True" runat="server" Width="208px" Height="28px"
            Font-Size="10pt" Design_Time_Lock="True" Visible="False">
        </asp:DropDownList>
        <asp:Button ID="Button2" Style="z-index: 113; left: 355px; position: absolute; top: 92px;
            design_time_lock: True" runat="server" Width="107px" Text="GetDataBase" Design_Time_Lock="True">
        </asp:Button>
        <asp:DropDownList ID="DropDownList3" Style="z-index: 114; left: 115px; position: absolute;
            top: 98px; design_time_lock: True" runat="server" Width="207px" Height="25px"
            Design_Time_Lock="True">
        </asp:DropDownList>
        <asp:Button ID="Button3" Style="z-index: 115; left: 354px; position: absolute; top: 132px;
            design_time_lock: True" runat="server" Width="110px" Text="生 成" Design_Time_Lock="True"
            Visible="False"></asp:Button>
        <asp:TextBox ID="txtLayOut" Style="z-index: 117; left: 26px; position: absolute;
            top: 206px; design_time_lock: True" runat="server" Width="619px" Height="367px"
            TextMode="MultiLine" BackColor="Ivory" Design_Time_Lock="True"></asp:TextBox>
        <asp:Button ID="Button4" Style="z-index: 118; left: 497px; position: absolute; top: 130px;
            design_time_lock: True" runat="server" Height="25px" Width="105px" Text="实体类"
            Design_Time_Lock="True"></asp:Button>
        <asp:Button ID="Button5" Style="z-index: 119; left: 355px; position: absolute; top: 171px;
            design_time_lock: True" runat="server" Width="107px" Text="Test" Height="25px"
            Design_Time_Lock="True" Visible="False"></asp:Button>
        <asp:Button ID="Button6" Style="z-index: 120; left: 499px; position: absolute; top: 171px;
            design_time_lock: True" runat="server" Height="23px" Width="105px" Text="集合类"
            Design_Time_Lock="True" Visible="False"></asp:Button>
    </form>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值