`
daideshun
  • 浏览: 6534 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

基于三层结构C#代码生成器

 
阅读更多
   一、功能简介:根据数据库表的字段生成相应的Model层(数据模型)、BLL层(业务处理)、DAL(数据访问层)

    二、动态代码生成器的编写过程中所涉及的数据库操作函数
 

       1.登陆验证
  
#region 登陆验证
        /// <summary>
        /// 登陆验证
        /// </summary>
        /// <param name="conStr"></param>
        /// <returns></returns>
        public static bool login(string conStr)
        {
            try
            {
                conn = new SqlConnection(conStr);
                conn.Open();
                conn.Close();
                return true;
            }
            catch
            {
                conn = null;
                return false;
            }
        }
        #endregion




      2、获取所有的数据库 
 #region 获取所有数据库
        /// <summary>
        /// 获取所有数据库
        /// </summary>
        /// <returns></returns>
        public static List<string> getDBName()
        {
            StringBuilder str = new StringBuilder();
            string sql = "select name from master..sysdatabases";
            List<string> list = new List<string>();
            try
            {
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    conn.Open();
                    SqlDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        list.Add(dr[0].ToString().ToLower());
                    }
                }
                conn.Close();
            }
            catch(Exception e)
            {
                throw e;
            }
            return list;
        }
        #endregion


       3、获取数据库的所有用户表
 
    #region 获取数据库的所有用户表
        /// <summary>
        /// 获取数据库的所有用户表
        /// </summary>
        /// <returns>返回表名连接字符串</returns>
        public static List<string> getTableName(string xtype)
        {
            
            //StringBuilder str = new StringBuilder();
            List<string> list = new List<string>();
            try
            {                
                string sql = "select * from sysobjects where xtype='" + xtype + "' and category<>2";
                if (conn != null)
                {
                    using (SqlCommand cmd = new SqlCommand(sql, conn))
                    {
                        conn.Open();
                        SqlDataReader dr = cmd.ExecuteReader();
                        while (dr.Read())
                        {
                            list.Add(dr[0].ToString().ToLower());
                        }
                    }
                    conn.Close();
                }
                list.Sort();
            }
            catch (Exception e)
            {
                throw e;
            }
            return list ;
        }
        #endregion


       4、获取表的所有字段名和类型

 
   #region 获取表的所有字段名和字段类型
        /// <summary>
        /// 获取表的所有字段名和字段类型
        /// </summary>
        /// <param name="tblName">查询的表名</param>
        /// <returns>字段名和类型名的连接字符串</returns>
        public static List<Table> getTblColumns(string tblName)
        {
            List<Table> list = new List<Table>();
            try
            {
                if (conn != null)
                {
                    DataSet ds = new DataSet();
                    conn.Open();
                    using (SqlDataAdapter sda = new SqlDataAdapter())
                    {
                        using (SqlCommand cmd = new SqlCommand("sp_columns", conn))
                        {
                            cmd.CommandType = CommandType.StoredProcedure;
                            cmd.Parameters.Add(new SqlParameter("@table_Name", tblName));
                            sda.SelectCommand = cmd;
                            sda.Fill(ds);
                            conn.Close();

                            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                            {
                                Table model = new Table();
                                model.ColumnName = ds.Tables[0].Rows[i][3].ToString();
                                model.TypeName   = ds.Tables[0].Rows[i][5].ToString();
                                model.Length     = Convert.ToInt32(ds.Tables[0].Rows[i][7].ToString());
                                list.Add(model);
                            }
                            
                        }
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            return list;
        }
        #endregion


  [size=large]三、以上工作完成之后,我们就可以依此来生成代码
      1、首先是model的生成,这一层代码的生成也是最简单的,根据数据库字段生成相应的get、set方法
      2、其次是业务逻辑层的生成,这一层就要是控制业务逻辑,调用相应的数据库操纵函数实现数据的访问和显示控制
      3、数据访问层,生成对数据库的增、删、改、查方法
      4、每一层都有可以抽象成相应的模板代码,在具体写项目时,无需人工编写,大大节约时间
  四、其中涉及的难点
       1、字符串的拼接,最繁琐
       2、关键字变色,相对来说难度较大,建立关键字库,处理生成的代码,识别类、借口、等关键字,并让他们高亮显示成不同的颜色

     
 #region 更改关键字的颜色
        /// <summary>
        /// 更改关键字和注释的颜色
        /// </summary>
        private void SetKeysColor(RichTextBox rtb)
        {
            //listclasses.Add(txtModel.Text);
            //listclasses.Add(txtModel.Text+"Service");
            //listclasses.Add(txtModel.Text+"Manager");

            //更改关键字的颜色
            int start = 0;
            string text = rtb.Text;
            string[] strs = text.Split(listmarks.ToArray());
            bool flag = false;
            foreach (string s in strs)
            {
                flag = false;
                //判断是否为关键字,变为 Blue
                if (!flag)
                {
                    foreach (string z in listkeys)
                    {
                        if (s == z)
                        {
                            rtb.Select(start, s.Length);
                            rtb.SelectionColor = Color.Blue;
                            flag = true;
                            break;
                        }
                    }
                }
                //判断是否为类、接口等,变为 CadetBlue
                if (!flag)
                {
                    foreach (string z in listclasses)
                    {
                        if (s == z)
                        {
                            rtb.Select(start, s.Length);
                            rtb.SelectionColor = Color.CadetBlue;
                            flag = true;
                            break;
                        }
                    }
                }
                start += s.Length + 1;
            }
        }
        /// <summary>
        /// 更改注释的颜色
        /// </summary>
        private void setColor(RichTextBox rtb)
        {
            //更改注释的颜色
            string text = rtb.Text;
            int count = 0;
            while (true)
            {
                int _start = text.IndexOf("///", count) + 3;
                if (_start == 2)
                    break;
                int _end = text.IndexOf('\n', _start);
                count = _end;
                string str = text.Substring(_start, _end - _start);
                str = str.Trim();
                if (str[0] == '<' && str[str.Length - 1] == '>')
                {
                    rtb.Select(_start - 3, (_end - _start) + 3);
                    rtb.SelectionColor = Color.Gray;
                    rtb.Select(0, 0);
                    rtb.SelectionColor = Color.Black;
                }
                else
                {
                    rtb.Select(_start - 3, 3);
                    rtb.SelectionColor = Color.Gray;
                    rtb.Select(_start, (_end - _start) + 3);
                    rtb.SelectionColor = Color.Green;
                    rtb.Select(0, 0);
                    rtb.SelectionColor = Color.Black;
                }
            }
        }

       3、对双引号字符串显红色的处理,使用正则表达式来处理,具体代码如下:
[/size]
     
  #region 更改双引号中字符串的颜色

        private string SetStringsColor(Match m)
        {
            //MessageBox.Show(m.Value);
            System.Text.StringBuilder retCode = new System.Text.StringBuilder();
            string[] lines = m.Value.Split('\n');
            int start = 0;
            foreach (string line in lines)
            {
                start = text_adl.Text.IndexOf(line);
                text_adl.Select(start, line.Length);
                while (start != -1)
                {
                    if (text_adl.SelectionColor == Color.Red)
                    {
                        start = text_adl.Text.IndexOf(line, start + line.Length);
                        if (start > 0)
                        {
                            text_adl.Select(start, line.Length);
                        }
                    }
                    text_adl.SelectionColor = Color.Red;
                }
                retCode.Append(line);
            }
            return retCode.ToString();
        }

        /// <summary>
        /// 更改双引号中字符串的颜色
        /// </summary>
        private void SetRedColor(RichTextBox rtb)
        {
            //更改双引号中字符串的颜色
            Regex r = new Regex("(\"[A-Za-z =,)(_@\n]*\")", RegexOptions.Multiline);//
            string str = rtb.Text;
            r.Replace(str, new MatchEvaluator(this.SetStringsColor));
        }

        #endregion

  #region 更改双引号中字符串的颜色
     
        private string SetStringsColor(Match m)
        {
            //MessageBox.Show(m.Value);
            System.Text.StringBuilder retCode = new System.Text.StringBuilder();
            string[] lines = m.Value.Split('\n');
            int start = 0;
            foreach (string line in lines)
            {
                start = text_adl.Text.IndexOf(line);
                text_adl.Select(start, line.Length);
                while (start != -1)
                {
                    if (text_adl.SelectionColor == Color.Red)
                    {
                        start = text_adl.Text.IndexOf(line, start + line.Length);
                        if (start > 0)
                        {
                            text_adl.Select(start, line.Length);
                        }
                    }
                    text_adl.SelectionColor = Color.Red;
                }
                retCode.Append(line);
            }
            return retCode.ToString();
        }

        /// <summary>
        /// 更改双引号中字符串的颜色
        /// </summary>
        private void SetRedColor(RichTextBox rtb)
        {
            //更改双引号中字符串的颜色
            Regex r = new Regex("(\"[A-Za-z =,)(_@\n]*\")", RegexOptions.Multiline);//
            string str = rtb.Text;
            r.Replace(str, new MatchEvaluator(this.SetStringsColor));
        }

        #endregion


[img]

[/img]
   
  • 大小: 107 KB
  • 大小: 107 KB
分享到:
评论

相关推荐

    C#代码模板生成器;Model层;DAL层;BLL层代码自动生成

    代码生成器可以根据数据库的表结构自动生成相应的数据访问接口和实现,如ADO.NET或Entity Framework中的DbContext。这样,开发者就可以专注于业务逻辑,而无需关心底层数据访问的细节。 再者,BLL层,即业务逻辑层...

    asp.net三层结构代码生成器

    `C#代码生成器源码` 提供的功能是自动生成这些层的代码,从而减轻程序员的工作负担。代码生成器通常会根据数据库模式自动创建DAL,然后基于这些数据访问组件生成BLL,最后构建表示层的接口。这样,开发者可以专注于...

    动软代码生成器C#连接mysql三层代码模板修改.rar

    《C#动软代码生成器连接MySQL数据库生成DAL BLL MODEL三层代码详解》 在软件开发过程中,为了提高开发效率和代码质量,代码生成工具扮演着重要的角色。动软代码生成器便是这样一款工具,它支持C#语言,并能与MySQL...

    C#简单三层结构代码生成器

    "C#简单三层结构代码生成器"就是这样一个工具,它可以自动生成这三层架构中的关键组件,包括.Model、BLL和DAL,极大地提高了开发效率。 首先,我们来看.Model层。Model层代表了应用程序的数据模型,通常包含实体类...

    C#三层构架代码生成器

    总的来说,C#三层构架代码生成器是开发基于C#的多层架构应用的利器,它通过自动化代码生成,简化了开发流程,提高了工作效率,同时提供了数据库表结构的文档生成功能,加强了项目的文档化管理。对于大型项目或团队...

    C#三层代码生成器(自己做的)

    在使用【C#代码生成器】时,用户需要先配置数据库连接信息,选择需要生成代码的表,然后指定生成的代码模板。点击生成后,工具将自动生成相应的代码文件,这些文件可以直接导入到Visual Studio或其他C#开发环境中,...

    C#代码生成器

    C#代码生成器会根据数据库表结构生成相应的DAL,BLL和MODEL代码,使得开发者无需手动编写这些底层代码。 **代码生成器的工作原理** 代码生成器通常通过以下步骤工作: 1. **数据库连接**:连接到MySQL服务器,获取...

    c#三层架构代码生成器

    Codematic 是一款为 C# 数据库程序员设计的自动代码生成器,Codematic 生成的代码基于基于面向对象的思想和三层架构设计,结合了Petshop中经典的思想和设计模式,融入了工厂模式,反射机制等等一些思想。采用 Model ...

    代码生成器,C#代码生成器

    【代码生成器与C#代码生成器】 代码生成器是一种工具,它能够自动化地创建代码,减少程序员手动编写重复性代码的工作量。在C# .NET环境中,代码生成器尤其受欢迎,因为它可以帮助开发者快速构建应用的基础结构,如...

    C#代码生成器,自动生成三层基础代码,数据库采用微软企业库的

    《C#代码生成器——快速构建三层架构应用的利器》 在软件开发过程中,编码是一项耗时且重复性较强的工作,特别是在构建具有复杂业务逻辑的系统时,代码生成器能够大大提高开发效率,减少手动编写基础代码的时间。...

    C#三层架构代码生成器

    在本项目中,代码生成器将根据MySQL中的表结构生成对应的C#代码。 5. **DAL层**:数据访问层是三层架构中最低的一层,它封装了所有与数据库交互的代码,如SQL查询、存储过程等。在本项目中,生成的DAL代码可能包括...

    C#代码生成器源码-基于MyBatis.NET

    【C#代码生成器源码-基于MyBatis.NET】是一个专为开发人员设计的工具,主要用于自动化C#代码的生成工作,特别是针对SQLServer数据库的项目。它利用了MyBatis.NET框架的强大功能,帮助开发者快速构建常规的三层架构...

    开源C#代码生成器

    对于数据库支持,开源C#代码生成器涵盖了SQLSERVER、ORACLE和MYSQL这三种常见的关系型数据库管理系统。这意味着无论你使用哪种数据库,都能无缝集成并生成相应的实体模型、数据访问层(DAL)代码或者业务逻辑层(BLL...

    C#源代码生成器

    三、C#源代码生成器的应用场景 1. 数据访问层(DAL)生成:基于数据库模式,自动生成与数据库表对应的实体类、接口和实现,包括CRUD(创建、读取、更新、删除)操作。 2. 用户界面(UI)生成:根据业务逻辑,自动...

    C#代码生成器源码-基于Spring.NET架构

    【C#代码生成器源码-基于Spring.NET架构】是一个专为C#开发设计的工具,它利用SQL...总的来说,这款基于Spring.NET的C#代码生成器是提高开发效率、规范项目结构的一个有力工具,对于大型企业级应用开发尤其有价值。

    C#代码生成器.rar

    本资源"**C#代码生成器.rar**"聚焦于利用C#来自动化生成SQL Server数据库相关的代码,以实现快速搭建三层架构系统,包括模型层(Model)、业务逻辑层(Business Logic Layer, BLL)和数据访问层(Data Access Layer,...

    ImCodeCodeCode三层结构代码生成器

    "ImCodeCodeCode三层结构代码生成器"是一个专门针对C#编程语言设计的工具,用于自动化生成基于三层架构的代码。三层架构是一种常见的软件设计模式,它将应用程序分为三个主要部分:表现层(UI)、业务逻辑层(BLL)...

    三层架构代码生成器-初版(C#)

    总结来说,这个三层架构代码生成器是一个基于C#的工具,适用于C/S程序开发,其主要目标是简化Model层的编写,通过自动化生成代码来提升开发效率。开发者需要理解三层架构的概念,并熟悉C#编程,才能充分利用这个工具...

    C#代码生成器源码查直接生成各层代码

    《C#代码生成器源码解析与应用指南》 C#代码生成器是一款高效实用的开发工具,尤其在快速构建项目框架时,能够显著提升开发效率。它基于C#编程语言,广泛应用于各类项目,包括但不限于企业级应用、移动开发等。这款...

Global site tag (gtag.js) - Google Analytics