熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

嘗試著寫自己的代碼生成器

2013-11-13 10:27:08  來源: .NET編程 
    我主要以三層模式為基礎安裝昨天的代碼加以修改來完成自己的通用的代碼生成器由於是初學而且專業課占去了大部分的時間只是嘗試的寫點功能還需要來熟悉下IO下的一些類所以這裡寫的只是為了作為練習作為以後的復習方便而已灰常不完善慢慢改進通過學習代碼生成器和三層模式的結構如果我要在這兩者學習間找到著力點重點是在三層模式不過基本還是要依托於對ADONET實現機制的熟悉程度如果熟悉了這兩者代碼生成器完全是數據拼接字符串的操作沒有了技術含量
   
    現在的專業的代碼生成器很多作為新手就因該從基礎學習而不是直接使用CodeSmith動軟這樣的企業用的代碼生成器不要心急從本質上了解他是怎麼一回事由於時間關系今天暫時粘貼一部分代碼等我寫完了在總結一下
   
    開篇先說一下就是要明白我在下面代碼中的對系統數據庫視圖的運用你會發現一切都很簡單親愛的同學們加油普通的應用開發不是搞科研所以沒有什麼不能學只要花時間就行不要崇拜誰一切都是要自己爭取的
   
    代碼不是最重要的重要的是思想新手看見的不應該是控件窗體而是一個個的類對象……
   
    好了下面就貼一下代碼剩下的很簡單了這兩天會補全 裡面的兩個MessageBox只是為了測試方便沒有意義
   
    using System;
   
    using SystemCollectionsGeneric;
   
    using SystemComponentModel;
   
    using SystemData;
   
    using SystemDrawing;
   
    using SystemText;
   
    using SystemWindowsForms;
   
    using SystemDataSqlClient;
   
   
   
    namespace 代碼生成器
   
    {
   
         public partial class Form : Form
   
         {
   
             public Form()
   
             {
   
                 InitializeComponent()
   
             }
   
   
   
             public DataTable ExecuteDataTable(string sql params SqlParameter[] paramers)
   
             {
   
                 using (SqlConnection con = new SqlConnection(tb_ConstrText))
   
                 {
   
                     conOpen()
   
                     using (SqlCommand cmd = conCreateCommand())
   
                     {
   
                         cmdCommandText = sql;
   
                         cmdParametersAddRange(paramers)
   
                         DataTable dt = new DataTable()
   
                         SqlDataAdapter adapter = new SqlDataAdapter(cmd)
   
                         adapterFill(dt)
   
                         return dt;
   
                     }
   
                 }
   
             }
   
             /// <summary>


   
    /// 數據庫字段類型轉換為C#字符類型
   
    /// </summary>
   
    /// <param name=dataType>數據庫中的字段類型</param>
   
    /// <returns>C#中的字段類型</returns>
   
             public static string StrToCsharp(string dataType)
   
             {
   
                 switch (dataType)
   
                 {
   
                     caseint:
   
                         return int;
   
                     casenvarchar:
   
                     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_SCHEMATABLES
   
                 foreach (DataRow row in TableRows)
   
                 {
   
                   string TableName=row[]ToString()
   
                   clb_TableNameItemsAdd(TableName)
   
                 }
   
             }
   
             /// <summary>
   
    /// 代碼生成按鈕
   
    /// </summary>
   
             private void btn_Bulider_Click_(object sender EventArgs e)
   
             {
   
                 //被選中的表
   
                 foreach (string TableName in clb_TableNameCheckedItems)
   
                 {
   
                         CreateModel(TableName)
   
                         CreateDAL(TableName)
   
                 }
   
   
   
             }
   
   
   
             private void CreateDAL(string TableName)
   
             {
   
                 //暫時假設主鍵名就是id


   
                  DataTable dt_column = ExecuteDataTable(select * from INFORMATION_SCHEMACOLUMNS where TABLE_NAME=@tablename and Column_Name<>id new SqlParameter(tablename TableName))
   
                string[] ColumnNames=new string[dt_columnRowsCount];//保存所屬表中的字段名
   
                for(int i=;i<dt_columnRowsCount;i++)
   
                {
   
                  string colname=(string)dt_columnRows[i][COLUMN_NAME];//獲得列名
   
                    ColumnNames[i]=colname;//將循環獲取的列名加入列名數組
   
                }
   
                string[] paramers = new string[dt_columnRowsCount];
   
                 for(int i=;i<paramersLength;i++)
   
                 {
   
                    paramers[i]=@+ColumnNames[i];
   
                 }
   
   
   
                 StringBuilder sb = new StringBuilder()
   
                 sbAppendLine(//添加操作
   
                 sbAppendLine( partial Class + TableName + DAL
   
                 sbAppendLine({
   
                 sbAppendLine(public static int AddNew( + TableName + model//返回新添加字段的主鍵
   
                 sbAppendLine({
   
                 sbAppendLine(object obj= SQLHelperExecuteScalar(
   
                 sbAppendLine(\insert into +TableName++stringJoin(ColumnNames)+) output insertedid values(+stringJoin(paramers)+)\
   
                 foreach (string colname in ColumnNames)
   
                 {
   
                   sbAppendLine(new SqlParameter(\+colname+\model+colname+
   
                 }
   
                 sbAppendLine(
   
                 sbAppendLine(return ConvertToInt(obj)
   
                 MessageBoxShow(sbToString())
   
             }
   
   
   
             /// <summary>
   
    /// 生成Model
   
    /// </summary>
   
    /// <param name=TableName>被選中的表名</param>
   
    /// <returns>model模型</returns>
   
             private void CreateModel(string TableName)
   
             {
   
                 DataTable dt_column = ExecuteDataTable(select * from INFORMATION_SCHEMACOLUMNS where TABLE_NAME=@tablename and Column_Name<>id new SqlParameter(tablename TableName))
   
                 StringBuilder sb = new StringBuilder()
   
                 sbAppendLine(Class + TableName)
   
                 sbAppendLine({
   
                 foreach (DataRow row in dt_columnRows)
   
                 {
   
                     string dt_Col = (string)row[COLUMN_NAME];
   
                     string col_Type = (string)row[DATA_TYPE];
   
                     string CsType = StrToCsharp(col_Type)
   
                     sbAppendLine(Public + CsType + + dt_Col + {get;set;}
   
                 }
   
                 sbAppendLine(}
   
                 //MessageBoxShow(sbToString())
   
             }
   
         }
   
    }


From:http://tw.wingwit.com/Article/program/net/201311/13667.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.