知识大全 尝试着写自己的代码生成器

Posted

篇首语:贪婪是最真实的贫穷,满足是最真实的财富。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 尝试着写自己的代码生成器相关的知识,希望对你有一定的参考价值。

    我主要以三层模式为基础 安装昨天的代码加以修改 来完成自己的通用的代码生成器 由于是初学而且专业课占去了大部分的时间 只是尝试的写点功能 还需要来熟悉下IO下的一些类 所以这里写的只是为了作为练习作为以后的复习方便而已 灰常不完善 慢慢改进 通过学习代码生成器和三层模式的结构 如果我要在这两者学习间找到着力点 重点是在三层模式 不过基本还是要依托于对ADO NET实现机制的熟悉程度 如果熟悉了这两者 代码生成器完全是数据拼接字符串的操作 没有了技术含量         现在的专业的代码生成器很多 作为新手就因该从基础学习 而不是直接使用CodeSmith 动软这样的企业用的代码生成器 不要心急 从本质上了解他是怎么一回事 由于时间关系今天暂时粘贴一部分代码 等我写完了 在总结一下         开篇先说一下 就是要明白我在下面代码中的对系统数据库视图的运用 你会发现一切都很简单 亲爱的同学们 加油 普通的应用开发不是搞科研 所以没有什么不能学 只要花时间就行 不要崇拜谁 一切都是要自己争取的         代码不是最重要的 重要的是思想 新手看见的不应该是控件 窗体 而是一个个的类 对象……        好了 下面就贴一下代码 剩下的很简单了 这两天会补全 里面的两个MessageBox只是为了测试方便 没有意义         using System;        using System Collections Generic;        using System ComponentModel;        using System Data;        using System Drawing;        using System Text;        using System Windows Forms;        using System Data SqlClient;                namespace 代码生成器                     public partial class Form : Form                              public Form ()                                      InitializeComponent()                                           public DataTable ExecuteDataTable(string sql params SqlParameter[] paramers)                                      using (SqlConnection con = new SqlConnection(tb_Constr Text))                                              con Open()                          using (SqlCommand cmd = con CreateCommand())                                                      cmd CommandText = sql;                             cmd Parameters AddRange(paramers)                              DataTable dt = new DataTable()                              SqlDataAdapter adapter = new SqlDataAdapter(cmd)                              adapter Fill(dt)                              return dt;                                                                                /// <summary>         /// 数据库字段类型转换为C#字符类型        /// </summary>        /// <param name= dataType >数据库中的字段类型</param>        /// <returns>C#中的字段类型</returns>                 public static string StrToCsharp(string dataType)                                      switch (dataType)                                              case int :                             return int ;                         case nvarchar :                         case varchar :                         case char :                         case nchar :                             return string ;                         case bit :                             return bool ;                         case datetime :                             return DateTime ;                         default :                           return object ;                                                       /// <summary>        /// 获取连接数据库的表名        /// </summary>        /// <param name= sender ></param>        /// <param name= e ></param>                 private void btn_Bulider_Click(object sender EventArgs e)                                      DataTable Table =ExecuteDataTable( SELECT TABLE_NAME FROM INFORMATION_SCHEMA TABLES )                      foreach (DataRow row in Table Rows)                                            string TableName=row[ ] ToString()                        clb_TableName Items Add(TableName)                                                        /// <summary>        /// 代码生成按钮        /// </summary>                 private void btn_Bulider_Click_ (object sender EventArgs e)                                      //被选中的表                     foreach (string TableName in clb_TableName CheckedItems)                                                  CreateModel(TableName)                              CreateDAL(TableName)                                                                        private void CreateDAL(string TableName)                                      //暂时假设主键名就是id                       DataTable dt_column = ExecuteDataTable( select * from INFORMATION_SCHEMA COLUMNS where TABLE_NAME=@tablename and Column_Name<> id new SqlParameter( tablename TableName))                     string[] ColumnNames=new string[dt_column Rows Count];//保存所属表中的字段名                    for(int i= ;i<dt_column Rows Count;i++)                                          string colname=(string)dt_column Rows[i][ COLUMN_NAME ];//获得列名                        ColumnNames[i]=colname;//将循环获取的列名加入列名数组                                        string[] paramers = new string[dt_column Rows Count];                     for(int i= ;i<paramers Length;i++)                                             paramers[i]= @ +ColumnNames[i];                                                  StringBuilder sb = new StringBuilder()                      sb AppendLine( //添加操作 )                      sb AppendLine( partial Class + TableName + DAL )                      sb AppendLine( )                      sb AppendLine( public static int AddNew( + TableName + model ) //返回新添加字段的主键 )                      sb AppendLine( )                      sb AppendLine( object obj= SQLHelper ExecuteScalar( )                      sb AppendLine( \\ insert into +TableName+ ( +string Join( ColumnNames)+ ) output inserted id values( +string Join( paramers)+ )\\ )                      foreach (string colname in ColumnNames)                                            sb AppendLine( new SqlParameter(\\ +colname+ \\ model +colname+ ) )                                           sb AppendLine( ) )                      sb AppendLine( return Convert ToInt (obj) )                      MessageBox Show(sb ToString())                                           /// <summary>        /// 生成Model        /// </summary>        /// <param name= TableName >被选中的表名</param>        /// <returns>model模型</returns>                 private void CreateModel(string TableName)                                      DataTable dt_column = ExecuteDataTable( select * from INFORMATION_SCHEMA COLUMNS where TABLE_NAME=@tablename and Column_Name<> id new SqlParameter( tablename TableName))                      StringBuilder sb = new StringBuilder()                      sb AppendLine( Class + TableName)                      sb AppendLine( )                      foreach (DataRow row in dt_column Rows)                                              string dt_Col = (string)row[ COLUMN_NAME ];                         string col_Type = (string)row[ DATA_TYPE ];                         string CsType = StrToCsharp(col_Type)                          sb AppendLine( Public + CsType + + dt_Col + get;set; )                                           sb AppendLine( )                      //MessageBox Show(sb ToString())                                       cha138/Article/program/net/201311/13667

相关参考

知识大全 基于元数据和模板的代码生成器的目标

本来是想弄完JavaScript混淆器再来整理这个的但是天天都在和数据库打交道索性还是先简化自己的工作量吧把自己关于代码生成器的一些想法放上来由于本人从开始工作到现在基本做的都是MIS从刚开始的脚本模

知识大全 编写代码生成器[1]

Eclipse工具开发:编写代码生成器[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs

知识大全 编写代码生成器[2]

Eclipse工具开发:编写代码生成器[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs

知识大全 编写代码生成器[6]

Eclipse工具开发:编写代码生成器[6]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs

知识大全 编写代码生成器[5]

Eclipse工具开发:编写代码生成器[5]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs

知识大全 编写代码生成器[4]

Eclipse工具开发:编写代码生成器[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs

知识大全 编写代码生成器[3]

Eclipse工具开发:编写代码生成器[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs

知识大全 Nhibernate与代码生成器介绍

Nhibernate与代码生成器介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  原来一直使用

知识大全 JS特效代码--日历生成器

JS特效代码--日历生成器  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! <hea

知识大全 Struts + Hibernate 代码生成器设计思路

Struts+Hibernate代码生成器设计思路  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!