C#网页版代码生成器

       C#网页版代码生成器,还在更新中....以前修复过ASPNETPAGER分页控件的网页版存储过程代码生成器,学到了一种思维,替换字符串,因此有空就写下了这个。仅供参考,本人水平还有待提高,写这个完全是兴趣,写的不好的地方不要骂我就行,呵呵。

存储过程代码如下,参考MSSQL SERVER文档。

存储过程代码
 1 
 2 ALTER proc [dbo].[GetTablesFromDatabase]
 3 @dataBaseName nvarchar(200)
 4 as
 5 declare @sql nvarchar(2000);
 6 set @sql='SELECT TABLE_CATALOG as "数据库", TABLE_SCHEMA as "表架构" , TABLE_NAME as "表名" ,TABLE_TYPE as "表类型" FROM INFORMATION_SCHEMA.TABLES 
 7 where TABLE_CATALOG=N'+@dataBaseName+' order by TABLE_NAME ';                 --get the role !
 8 --SELECT * FROM INFORMATION_SCHEMA.TABLES 
 9 --where TABLE_CATALOG='TestSub' --get the schema from databse
10 exec(@sql);
11 print(@sql);
12 
13 ALTER  proc  [dbo].[GetColumnsFromTable]
14 @dataBaseName nvarchar(200),
15 @tableName nvarchar(200)
16 as
17 declare @dataBase  nvarchar(200);
18 set @dataBase=rtrim(@dataBaseName)+'.INFORMATION_SCHEMA.COLUMNS';
19 declare @sql nvarchar(2000);
20 --set @sql='SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, COLUMN_DEFAULT
21 --FROM  '+@dataBaseName+'.INFORMATION_SCHEMA.COLUMNS
22 --WHERE TABLE_NAME =N'+@tableName+';'
23 set @sql='SELECT TABLE_CATALOG as "数据库", TABLE_SCHEMA as "表架构" , TABLE_NAME as "表名", COLUMN_NAME as "列名",DATA_TYPE  as "列数据类型"
24 FROM '+@dataBase
25 +' WHERE TABLE_NAME =N'+@tableName+' order by COLUMN_NAME';
26 exec(@sql);
27 print(@sql);

 

页面代码如下:

 

页面布局代码
  1 <html xmlns="http://www.w3.org/1999/xhtml">
  2 <head runat="server">
  3     <title>无标题页</title>
  4     <style type="text/css" >
  5     .dg-HeaderStyle {
  6     background-color: #E3E3E3;
  7     font-size: 12px;
  8     font-weight: bold;
  9     text-indent: 5px;
 10     line-height: 15px;
 11     }
 12     .dg-ItemStyle {
 13     text-indent: 5px;
 14     font-size: 12px;
 15     line-height: 15px;
 16     }
 17     .textInput { width:185px; height:22px; float:left;}
 18     .textInput_focus { border:solid red 1px; height:20px; line-height:20px; background:url(/DataBaseTablesColumns/textInput_bg.gif) repeat-x left; width:175px; padding:0 0 0 5px;}
 19     .textInput_blur { border:solid blue 1px; height:20px; line-height:20px; background:url(/DataBaseTablesColumns/textInput_bg.gif) repeat-x left;width:175px; padding:0 0 0 5px;}
 20 
 21     </style>
 22 </head>
 23 <body>
 24     <form id="form1" runat="server">
 25     <div>
 26         <div style="width:100%; height:28px; background-color:Silver;">
 27             <p style="border-style: groove; border-color: #0000FF; color: #CC00FF; text-decoration: underline; text-align: center; font-weight: bold; background-color: #C0C0C0;"> Maded By JasenKin   2010/01/11 00:53</p></div>
 28         
 29         <div style="width:45%; float: left;">
 30         <p style="font:blue;">第一步:选择数据库</p>
 31             <asp:DropDownList ID="ddlDataBase" runat="server">
 32             </asp:DropDownList><br />
 33         <asp:Button ID="btnShowTables" runat="server" Text="Show Tables From DataBase" 
 34                 onclick="btnShowTables_Click" BackColor="Silver" BorderStyle="Groove" 
 35                 Font-Bold="True"  />
 36         <br />
 37         <asp:DataGrid ID="dg" runat="server" AutoGenerateColumns="False" CellPadding="3"
 38             CellSpacing="0" PageSize="1" OnItemCommand="dg_ItemCommand" 
 39                 style="margin-right: 17px">
 40             <HeaderStyle CssClass="dg-HeaderStyle"></HeaderStyle>
 41             <ItemStyle CssClass="dg-ItemStyle" />
 42             <Columns>
 43                 <asp:TemplateColumn HeaderText="数据库">
 44                     <HeaderStyle Width="50px" />
 45                     <ItemStyle Width="50px" />
 46                     <ItemTemplate>
 47                         <%# DataBinder.Eval(Container.DataItem, "数据库")%>
 48                     </ItemTemplate>
 49                 </asp:TemplateColumn>
 50                 <asp:TemplateColumn HeaderText="表架构">
 51                     <HeaderStyle Width="50px" />
 52                     <ItemStyle Width="50px" />
 53                     <ItemTemplate>
 54                         <%# DataBinder.Eval(Container.DataItem, "表架构").ToString()%>
 55                     </ItemTemplate>
 56                 </asp:TemplateColumn>
 57                 <asp:TemplateColumn HeaderText="表名">
 58                     <HeaderStyle Width="50px" />
 59                     <ItemStyle Width="50px" />
 60                     <ItemTemplate>
 61                         <%# GetTableName(Container.DataItem)%>
 62                     </ItemTemplate>
 63                 </asp:TemplateColumn>
 64                 <asp:TemplateColumn HeaderText="表类型">
 65                     <HeaderStyle Width="100px" />
 66                     <ItemStyle Width="100px" />
 67                     <ItemTemplate>
 68                         <%# DataBinder.Eval(Container.DataItem, "表类型").ToString()%>
 69                     </ItemTemplate>
 70                 </asp:TemplateColumn>
 71                 <asp:TemplateColumn HeaderText="操作">
 72                     <HeaderStyle Width="65px" />
 73                     <ItemStyle Width="65px" />
 74                     <ItemTemplate>
 75                         <asp:LinkButton ID="edit" CommandName="edit" ForeColor="#FF0000" runat="server">编辑</asp:LinkButton>
 76                         <asp:LinkButton ID="del" CommandName="del" ForeColor="#FF0000" runat="server">删除</asp:LinkButton>
 77                     </ItemTemplate>
 78                 </asp:TemplateColumn>
 79             </Columns>
 80         </asp:DataGrid>
 81         </div>  
 82         
 83         <div style="width:45%; float:right;">
 84         <p style="font:blue;">第二步:选择表名</p>
 85         <asp:DropDownList ID="ddlTablesName" runat="server" 
 86             onselectedindexchanged="ddlTablesName_SelectedIndexChanged" 
 87             Visible="False" AutoPostBack="True" >
 88         </asp:DropDownList> 
 89         <br />
 90          <asp:DataGrid ID="gwShowColumn" runat="server" AutoGenerateColumns="False" CellPadding="3"
 91             CellSpacing="0" PageSize="1"  style="margin-right: 17px">
 92             <HeaderStyle CssClass="dg-HeaderStyle"></HeaderStyle>
 93             <ItemStyle CssClass="dg-ItemStyle" />
 94             <Columns>
 95                 <asp:TemplateColumn HeaderText="数据库">
 96                     <HeaderStyle Width="70px" />
 97                     <ItemStyle Width="70px" />
 98                     <ItemTemplate>
 99                         <%# DataBinder.Eval(Container.DataItem, "数据库")%>
100                     </ItemTemplate>
101                 </asp:TemplateColumn>
102                 <asp:TemplateColumn HeaderText="表架构">
103                     <HeaderStyle Width="50px" />
104                     <ItemStyle Width="50px" />
105                     <ItemTemplate>
106                         <%# DataBinder.Eval(Container.DataItem, "表架构").ToString()%>
107                     </ItemTemplate>
108                 </asp:TemplateColumn>
109                 <asp:TemplateColumn HeaderText="表名">
110                     <HeaderStyle Width="70px" />
111                     <ItemStyle Width="70px" />
112                     <ItemTemplate>
113                         <%# GetTableName(Container.DataItem)%>
114                     </ItemTemplate>
115                 </asp:TemplateColumn>
116                 <asp:TemplateColumn HeaderText="列名">
117                     <HeaderStyle Width="70px" />
118                     <ItemStyle Width="70px" />
119                     <ItemTemplate>
120                         <%# DataBinder.Eval(Container.DataItem, "列名").ToString()%>
121                     </ItemTemplate>
122                 </asp:TemplateColumn>
123                 <asp:TemplateColumn HeaderText="列数据类型">
124                     <HeaderStyle Width="70px" />
125                     <ItemStyle Width="70px" />
126                     <ItemTemplate>
127                         <%# DataBinder.Eval(Container.DataItem, "列数据类型").ToString()%>
128                     </ItemTemplate>
129                 </asp:TemplateColumn>
130             </Columns>
131         </asp:DataGrid>
132             <br />
133             <p style="font:blue;">第三步:指定命名空间,点击按钮获取数据库表对象模型</p>
134              Input NameSpace Name:<asp:TextBox ID="tbNameSpace" runat="server" CssClass="textInput_blur"  onfocus="this.className='textInput_focus'"
135                                         onblur="this.className='textInput_blur'"></asp:TextBox>
136             <br />
137             <asp:Button ID="btnCreate" runat="server" Text="Create Object Model" 
138                 onclick="btnCreate_Click" BorderColor="Silver" BorderStyle="Groove" 
139                 Font-Bold="True" />
140         <br />
141             <asp:Button ID="btnCreateFile" runat="server" Text="CreateFile" OnClick="btnCreateFile_Click" /><br />
142        
143             <asp:Label ID="lblShow" runat="server" BackColor="Silver" BorderColor="Blue" 
144                 BorderStyle="Solid"></asp:Label>
145         </div>
146         <br />
147         <div>
148           
149         
150         
151         </div>
152          
153          
154     </div>
155     </form>
156 </body>
157 </html>
158 

 

后台操作代码:由于获取操作系统消耗内存太大,有点卡,就没那么写了

 

操作代码
  1 using System;
  2 using System.Collections;
  3 using System.Configuration;
  4 using System.Data;
  5 using System.Web;
  6 using System.Web.Security;
  7 using System.Web.UI;
  8 using System.Web.UI.HtmlControls;
  9 using System.Web.UI.WebControls;
 10 using System.Web.UI.WebControls.WebParts;
 11 
 12 using ForeTech.Data;
 13 using System.Data.SqlClient;
 14 
 15 using System.IO;
 16 
 17 public partial class DataBaseTablesColumns_GetTablesFromDB : System.Web.UI.Page
 18 {
 19     protected void Page_Load(object sender, EventArgs e)
 20     {
 21         btnCreate.Enabled = false;
 22         BindData();
 23     }
 24 
 25     private void BindData()
 26     {
 27         lblShow.Text = "<br />操作指南<br />" + "第一步:选择数据库 <br />" + "第二步:选择表名 <br />" + "第三步:指定命名空间,点击按钮获取数据库表对象模型<br /><br />";
 28         if (ddlDataBase.Items.Count <= 0)
 29         {
 30             ddlDataBase.Items.Add(new ListItem("ForeTechTest"));//get the database from sql server 
 31             //throw new NotImplementedException();
 32         }
 33     }
 34 
 35     protected void btnShowTables_Click(object sender, EventArgs e)
 36     {
 37         string dataBaseName = "'" + ddlDataBase.SelectedItem.Text.Trim() + "'";
 38         ddlTablesName.Visible = true;
 39         SqlParameter sp = new SqlParameter("@dataBaseName", SqlDbType.NVarChar, 200);
 40         sp.Value = dataBaseName;
 41         DataSet ds = DBTool.ExecuteDataset(CommandType.StoredProcedure, "GetTablesFromDatabase", sp);
 42         ddlTablesName.DataTextField = "表名";
 43         ddlTablesName.DataValueField = "表名";
 44         ddlTablesName.DataSource = ds;
 45         ddlTablesName.DataBind();
 46         dg.DataSource = ds;
 47         dg.DataBind();
 48         /*  try
 49           {
 50               int colWidth = 200;
 51               if (colWidth > 0)
 52               {
 53                   for (int i = 0; i < gwShowTables.Columns.Count; i++)
 54                   {
 55                       gwShowTables.Columns[i].HeaderStyle.Width = 200;// ItemStyle.Width = colWidth;
 56                   }
 57               }
 58           }
 59           catch
 60           {
 61               // Report error.      
 62           }
 63           */
 64     }
 65 
 66     protected void ddlTablesName_SelectedIndexChanged(object sender, EventArgs e)
 67     {
 68         string strTable = "'" + ddlTablesName.SelectedItem.Value.Trim() + "'";
 69         SqlParameter[] sp = new SqlParameter[2];
 70         SqlParameter database = new SqlParameter("@dataBaseName", SqlDbType.NVarChar, 200);
 71         database.Value = ddlDataBase.SelectedItem.Text.Trim();
 72         SqlParameter selectedTable = new SqlParameter("@tableName", SqlDbType.NVarChar, 200);
 73         selectedTable.Value = strTable;
 74         sp[0= database;
 75         sp[1= selectedTable;
 76         DataSet ds = DBTool.ExecuteDataset(CommandType.StoredProcedure, "GetColumnsFromTable", sp);
 77         gwShowColumn.DataSource = ds;
 78         gwShowColumn.DataBind();
 79         btnCreate.Enabled = true;
 80         /*   try
 81            {
 82                int colWidth = 200;
 83                if (colWidth > 0)
 84                {
 85                    for (int i = 0; i < gwShowTables.Columns.Count; i++)
 86                    {
 87                        gwShowTables.Columns[i].HeaderStyle.Width = 200;// ItemStyle.Width = colWidth;
 88                    }
 89                }
 90            }
 91            catch
 92            {
 93                // Report error.      
 94            }*/
 95 
 96     }
 97     protected string GetTableName(object dataItem)
 98     {
 99         string str = "";
100         if (dataItem.GetType().Name.Equals("DataRowView"))
101         {
102             DataRowView row = (DataRowView)dataItem;
103             str = row["表名"].ToString();
104         }
105         return str;
106     }
107 
108     protected void dg_ItemCommand(object source, DataGridCommandEventArgs e)
109     {
110         /*  
111           if (e.CommandName == "edit")
112           {
113             
114           }
115           else if (e.CommandName == "del")
116           {
117            
118           }*/
119     }
120 
121     protected void btnCreate_Click(object sender, EventArgs e)
122     {
123 
124         if (tbNameSpace.Text == "")
125         {
126             Response.Write("<script>alert('Please input namespace!!!');</script>");
127         }
128         btnCreate.Enabled = true;
129         string className = ddlTablesName.SelectedItem.Text.ToString();
130         string strTable = "'" + className + "'";
131         SqlParameter[] sp = new SqlParameter[2];
132         SqlParameter database = new SqlParameter("@dataBaseName", SqlDbType.NVarChar, 200);
133         database.Value = ddlDataBase.SelectedItem.Text.Trim();
134         SqlParameter selectedTable = new SqlParameter("@tableName", SqlDbType.NVarChar, 200);
135         selectedTable.Value = strTable;
136         sp[0= database;
137         sp[1= selectedTable;
138         DataSet ds = DBTool.ExecuteDataset(CommandType.StoredProcedure, "GetColumnsFromTable", sp);
139         string fields = "";
140         string propertities = "";
141         if (ds != null && ds.Tables[0].Rows.Count > 0)
142         {
143             for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
144             {
145                 propertities += " %null%%null%%null%%null%%null%%null%%null%%null%public " + ChangeToCSharpType(ds.Tables[0].Rows[i]["列数据类型"].ToString().Trim()) + "   " + ds.Tables[0].Rows[i]["列名"].ToString().Trim() + "%changeRow%" +
146                      "%null%%null%%null%%null%%null%%null%%null%%null%{%changeRow%" +
147                         " %null%%null%%null%%null%%null%%null%%null%%null%%null%%null%%null%set" + " {  " + ds.Tables[0].Rows[i]["列名"].ToString().Trim() + " = value; }%changeRow%" +
148                         " %null%%null%%null%%null%%null%%null%%null%%null%%null%%null%%null%get" + " { return _" + ds.Tables[0].Rows[i]["列名"].ToString().Trim() + "; }%changeRow%" +
149                      "%null%%null%%null%%null%%null%%null%%null%%null%}%changeRow%";
150                 fields += " %null%%null%%null%%null%%null%%null%%null%%null%private  " + ChangeToCSharpType(ds.Tables[0].Rows[i]["列数据类型"].ToString().Trim()) + "   _" + ds.Tables[0].Rows[i]["列名"].ToString().Trim() + ";%changeRow%";
151             }
152         }
153         string sql = @"
154 using System;%changeRow%
155 namespace %namespace%%changeRow%
156 {%changeRow%
157  %null%%null%%null%%null%   /// <summary>%changeRow%
158  %null%%null%%null%%null%   /// 实体类%class% (属性说明自动提取数据库字段的描述信息)%changeRow%
159  %null%%null%%null%%null%   /// </summary>%changeRow%
160  %null%%null%%null%%null%   public partial class %class%  %changeRow%
161  %null%%null%%null%%null%   {%changeRow%
162  %null%%null%%null%%null%%null%%null%%null%%null%      public %class% ()%changeRow%
163  %null%%null%%null%%null%%null%%null%%null%%null%      {%changeRow%
164  %null%%null%%null%%null%%null%%null%%null%%null%      }%changeRow%
165 
166  %null%%null%%null%%null%%null%%null%%null%%null%      #region 字段%changeRow%
167                                                        %fields%%changeRow%
168  %null%%null%%null%%null%%null%%null%%null%%null%       #endregion 字段%changeRow%
169 
170  %null%%null%%null%%null%%null%%null%%null%%null%       #region 属性%changeRow%
171                                                         %propertities%%changeRow%
172  %null%%null%%null%%null%%null%%null%%null%%null%       #endregion 属性%changeRow%
173  %null%%null%%null%%null%    }%changeRow%
174 }
175 ";
176         string replaceSql = sql.Replace("%namespace%", tbNameSpace.Text.Trim()).Replace("%class%", className).Replace("%fields%", fields).Replace("%propertities%", propertities).Replace("%null%""&nbsp;").Replace("%changeRow%""<br />");
177 
178         // tbObjectData.Text =Server.HtmlDecode(replaceSql);
179         lblShow.Text = replaceSql;
180         WriteContent(replaceSql,className);
181     }
182 
183     /// <summary>
184     /// 数据库中与C#中的数据类型对照
185     /// </summary>
186     /// <param name="type"></param>
187     /// <returns></returns>
188     private string ChangeToCSharpType(string type)
189     {
190         string reval = string.Empty;
191         switch (type.ToLower())
192         {
193             case "int":
194                 reval = "Int32";
195                 break;
196             case "text":
197                 reval = "String";
198                 break;
199             case "bigint":
200                 reval = "Int64";
201                 break;
202             case "binary":
203                 reval = "System.Byte[]";
204                 break;
205             case "bit":
206                 reval = "Boolean";
207                 break;
208             case "char":
209                 reval = "String";
210                 break;
211             case "datetime":
212                 reval = "System.DateTime";
213                 break;
214             case "decimal":
215                 reval = "System.Decimal";
216                 break;
217             case "float":
218                 reval = "System.Double";
219                 break;
220             case "image":
221                 reval = "System.Byte[]";
222                 break;
223             case "money":
224                 reval = "System.Decimal";
225                 break;
226             case "nchar":
227                 reval = "String";
228                 break;
229             case "ntext":
230                 reval = "String";
231                 break;
232             case "numeric":
233                 reval = "System.Decimal";
234                 break;
235             case "nvarchar":
236                 reval = "String";
237                 break;
238             case "real":
239                 reval = "System.Single";
240                 break;
241             case "smalldatetime":
242                 reval = "System.DateTime";
243                 break;
244             case "smallint":
245                 reval = "Int16";
246                 break;
247             case "smallmoney":
248                 reval = "System.Decimal";
249                 break;
250             case "timestamp":
251                 reval = "System.DateTime";
252                 break;
253             case "tinyint":
254                 reval = "System.Byte";
255                 break;
256             case "uniqueidentifier":
257                 reval = "System.Guid";
258                 break;
259             case "varbinary":
260                 reval = "System.Byte[]";
261                 break;
262             case "varchar":
263                 reval = "String";
264                 break;
265             case "Variant":
266                 reval = "Object";
267                 break;
268             default:
269                 reval = "String";
270                 break;
271         }
272         return reval;
273     }
274 
275     protected void btnCreateFile_Click(object sender, EventArgs e)
276     {
277        // WriteContent();
278 
279     }
280 
281     private void WriteContent(string inputString,string className)
282     {
283         string path = @"d:\MyTestDir\"+className.Trim()+".cs";
284         string inputStr = inputString;
285         try
286         {
  if (!Directory.Exists(@"d:\MyTestDir\"))
            {
                Directory.CreateDirectory(@"d:\MyTestDir\");
            }
287             if (File.Exists(path))
288             {
289                 File.Delete(path);
290 
291             }
292             if (!File.Exists(path))
293             {
294                 // Create a file to write to.
295 
296                 using (StreamWriter sw = File.CreateText(path))
297                 {
298                     string[] strRows = inputStr.Replace("&nbsp;"" ").Replace("<br />", Convert.ToChar(255).ToString()).Split(Convert.ToChar(255));
299                     foreach (string strRow in strRows)
300                     {
301                         sw.WriteLine(strRow);
302                     }
303                 }
304             }
305 
306             // Open the file to read from.
307             using (StreamReader sr = File.OpenText(path))
308             {
309                 string s = "";
310                 while ((s = sr.ReadLine()) != null)
311                 {
312                     Response.Write(s + "<br />");
313                 }
314             }
315         }
316         catch (IOException ex)
317         {
318             Response.Write(ex.ToString());
319         }
320     }
321 }
322 

 

操作图片如下:

 

 

 

 

 

 

 

 

 

 

posted @ 2010-02-11 14:21  jasen.kin  阅读(4656)  评论(1编辑  收藏  举报