用ASP.NET写你自己的代码生成器

   用ASP.NET写你自己的代码生成器 作者来源: 
阅读 数 205 人次 , 2006-3-29 4:33:00 
<script type="text/javascript"> </script>


最近写实体类集合类控制类什么的太“类”了,因此就花了点时间写了个代码生成器,与大家共享!

frmmain.aspx

<%@ page language="c#" codebehind="frmmain.aspx.cs" autoeventwireup="false" inherits="web_test.frmmain" %>
<!doctype html public "-//w3c//dtd html 4.0 transitional//en" >
<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>
frmmain.aspx.cs

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;

namespace web_test
{
/// <summary>
/// 作者:davi
/// 日期:3003-03-18
/// </summary>
public class frmmain : system.web.ui.page
{
protected system.web.ui.webcontrols.label label1;
protected system.web.ui.webcontrols.label label2;
protected system.web.ui.webcontrols.label label4;
protected system.web.ui.webcontrols.dropdownlist dropdownlist1;
protected system.web.ui.webcontrols.label label5;
protected system.web.ui.webcontrols.textbox txtservername;
protected system.web.ui.webcontrols.textbox txtusername;
protected system.web.ui.webcontrols.textbox txtpassword;
protected system.web.ui.webcontrols.button button1;
protected system.web.ui.webcontrols.dropdownlist dropdownlist2;
protected system.web.ui.webcontrols.label label6;
protected system.web.ui.webcontrols.label label7;
protected system.web.ui.webcontrols.button button2;
protected system.web.ui.webcontrols.dropdownlist dropdownlist3;
protected system.web.ui.webcontrols.button button3;
protected system.web.ui.webcontrols.textbox txtlayout;
protected system.web.ui.webcontrols.button button4;
protected system.web.ui.webcontrols.button button5;
protected system.web.ui.webcontrols.button button6;
private sqlconnection m_scon;
private dataset m_ds;

private void page_load(object sender, system.eventargs e)
{
m_scon = new sqlconnection();
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 

【基本说明】 1、能够生成三层工厂模式操作的所有基本代码,简单的数据库操作。 2、生成的代码包括了 MODEL、BLL、Factory、IDAL、DAL、DBHelper、Config 生成的代码内有详细注释可提供参考。 3、提供数据库增、删、改、查、分页及其事务,并提供多种重载方式。 4、所有数据表必须有主键且主键是第一列,这个主要是为了保证获取记录和分页获取的统一性,其实可以取消这个规则。 6、建议新建App_Code文件夹将生成的C#代码放里面。见此文件夹直接拷贝到项目下既可以使用。 7、不保证所提供软件或程序的完整性和安全性。 8、请在使用前查毒 (这也是您使用其它网络资源所必须注意的) 。 9、《Coder(ASP.NET代码生成器)》需要.Net FrameWork2.0运行环境,基于SQL Server 2005使用。 10、如无法运行本软件,请下载并安装由微软公司提供的.Net FrameWork2.0系统. 11、如果您在使用过程中遇到程序问题或建议请于我联系我的Email是 mailto:liliang119007@163.com。 【生成单层代码】 输入数据库名(Server)登录名(Name)密码(Pwd),连接后选择库名(Database)表名(Tables) 之后单击'生成单层代码'新建App_Code文件夹将生成的C#代码(ASP.NET后台代码)放里面, 【生成三层工厂模式项目】 (1)B/S架构: 输入数据库名(Server)登录名(Name)密码(Pwd)连接数据库成功后直接点生成整个项目选择路径确定就好了。 (2)C/S架构: 输入数据库名(Server)登录名(Name)密码(Pwd)连接数据库成功后直接点生成整个项目选择路径确定, 生成项目后打开该项目解决方案将表示层删掉, 再单击vs的(文件→添加→新建项目→选择Windows应用程序),这样就生成C/S架构的程序了!
您是不是因为ASP.NET的开发和维护繁琐而烦恼,微软的开发工具更新速度、开发技巧是成多元化的趋势,ASP.NET以其灵活多变的开发模式,深受广大开发人员的喜爱,灵活多变的开发模式有其利的一面,也有其不好的地方,特别是程序代码的随意性较强,即开发人员可以把代码放到任何一个地方,且变量的使用也是无度的、无规律的,这对目前讲究团队开发的流程管理来讲,简直就是一种灾难,本软件将彻底解决您的后顾之忧,通过本软件的自动生成功能,生成的ASP.NET代码规范、全部开源,不存在用隐含的内容,全部代码逻辑开源的展示给客户,符合团队开发的管理要求。本工作室的开发团队汲取多位资深开发人员多年的项目开发经验开发出本软件, 使用本软件从最基本的VO对象到ASPX页面的新增、删除、修改、查询等功能一起生产,代码功能一一俱全。您只需要稍微做下界面的排版即可使用到实际的项目中了。 1、使用本软件做开发的优势: 如果您是ASP.NET开发人员,一定会为每天开发中大量的重复拷贝、粘贴代码(如分页等功能)而感到烦恼,又或为ASP.NET对模式开发的繁琐关联配置而显得无可奈何时。使用本软件可以自动生成代码、建立页面关联。开发人员只要前期对业务了解清楚,数据库表设计明确,用本软件即可完成程序的编。 如果您是经常使用NHibernate或其他DLL插件的ASP.NET开发人员,一定会为NHibernate或其他DLL插件的配置部署问题而搞懵,这些类型的插件有个最大的问题是其核心操作均是由该插件的内部完成,对开发人员来说是个黑匣子(一般用户不会去读其开源代码),而且多个项目用同类型的插件部署到一部服务器上的时候,很容易造成版本冲突,且出现莫名其妙的问题。这些插件产生的冗余代码,也让开发人员不舒服。使用本软件生成的代码,全部开源,结构清晰,在您的开发工程中绝对不需要引用任何插件或链接库。 如果您是公司或项目负责人,一定会遇到这样的情况,公司拥有众多的ASP.NET开发高手,而开发习惯也各式各样,因而对项目接手的维护人员的技术要求也相应需要提高,这样项目的投入成本自然增加,而企业的利润也相应减少。没有统一开发的模式,对项目的后期维护是一个相当痛苦的过程,何况IT界人才流动频繁,项目的交接也是常有的问题。使用本软件的自动生成的代码,符合.NET的开发模式结合工厂模式,展示、业务、逻辑、存储的分层实现,代码的编已分门归类,重要体现了“桥归桥,路归路”的理念,这样对任何需要尽快熟悉项目的人员,一定可以在短时间内理解项目的架构思想,很快上手。 2、本软件自动生成的内容: ★ VO、POJO对象 ★ DAO接口 ★ IMPL接口实现类 ★ DAO工厂 ★ VO、POJO工厂 ★ DBC数据库连接管理类,数据库事务管理机制 ★ ASPX调用页面(增、删、改、查)(含.CS文件),分页功能自动实现 ★ Web.Config配置文件(VS2005工程需要的文件) 3、特色: ☆ 一键生成,简洁使用。 ☆ 生成的代码全部开源,没有任何通过插件或链接库来做的操作。 ☆ 支持多表的多主键处理。 ☆ 支持数据事务的操作。 ☆ 生成内容可以依据客户的需要来选择性的生成。 ☆ 支持自定义查询接口的生成,用户可以定义查询条件。 ☆ 目前支持Oracle、Sqlserver 数据库对象的自动生成代码。 4、联系方式: Email通讯邮箱 : autocode@126.com QQ留言:915842778
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值