- 浏览: 6318 次
- 性别:
- 来自: 长沙
最新评论
基于三层结构C#代码生成器
一、功能简介:根据数据库表的字段生成相应的Model层(数据模型)、BLL层(业务处理)、DAL(数据访问层)
二、动态代码生成器的编写过程中所涉及的数据库操作函数
1.登陆验证
2、获取所有的数据库
3、获取数据库的所有用户表
4、获取表的所有字段名和类型
[size=large]三、以上工作完成之后,我们就可以依此来生成代码
1、首先是model的生成,这一层代码的生成也是最简单的,根据数据库字段生成相应的get、set方法
2、其次是业务逻辑层的生成,这一层就要是控制业务逻辑,调用相应的数据库操纵函数实现数据的访问和显示控制
3、数据访问层,生成对数据库的增、删、改、查方法
4、每一层都有可以抽象成相应的模板代码,在具体写项目时,无需人工编写,大大节约时间
四、其中涉及的难点
1、字符串的拼接,最繁琐
2、关键字变色,相对来说难度较大,建立关键字库,处理生成的代码,识别类、借口、等关键字,并让他们高亮显示成不同的颜色
3、对双引号字符串显红色的处理,使用正则表达式来处理,具体代码如下:
[/size]
#region 更改双引号中字符串的颜色
[img]
[/img]
二、动态代码生成器的编写过程中所涉及的数据库操作函数
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]
相关推荐
Codematic 是一款为 C# 数据库程序员设计的自动代码生成器,Codematic 生成的代码基于基于面向对象的思想和三层架构设计,结合了Petshop中经典的思想和设计模式,融入了工厂模式,反射机制等等一些思想。采用 Model ...
动软.Net代码生成器Codematic是一款为C#数据库程序员设计的自动代码生成器,Codematic生成的代码基于面向对象的思想和三层架构设计,可以直接生成三层架构的项目的代码,使程序员可以节省大量机械录入的时间和重复...
本网站机遇C#语言,开发的三层结构,三层结构基于动软代码生成器生成,是学习动软的良好版本。
可以生成三层架构的代码。代码生成效率很高。 它可以生成:实体Model,DAL(数据访问层),IDAL(接口层),DALFactory(类工厂),BLL(业务逻辑层),WEB层等多层的代码,可以节省大量的时间来做业务逻辑的代码,那些...
8、《Coder代码生成器》需要.Net FrameWork2.0以上运行环境,基于SQL Server 2005使用。 9、如无法运行本软件,请下载并安装由微软公司提供的.Net FrameWork2.0系统. 10、如果您在使用过程中遇到程序问题或建议...
方便用户更好的理解和使用该架构进行开发,配合动软.Net代码生成器,可以使开发效率事半功倍,倍感轻松。 该项目涉及如下几项要点应用: 1) 基于标准的三层结构。 2) 表示层采用MVC模式。 3) 数据的增、删、改、...
CodePlus是一款为C#数据库程序员设计的自动“笨代码”生成器,CodePlus生成的代码基于三层结构设计思想,主要实现数据库中对表、视图的选择(select)、修改(update)、删除(delete)、新建(Insert)和存在(Exist...
2、基于XSLT模板,生成常用操作的三层架构C#代码,包括插入、更新、删除、查询、分页查询等操作。 用户可自定义模板。3、支持SQL Server/Oracle/MySQL/Access等常用数据库new 新 特 性增加对Oracle/MySQL的支持 。...
DbToCode 是一款为 C# 数据库程序员设计的自动代码生成器,DbToCode 生成的代码基于基于面向对象的思想和三层架构设计,结合了Petshop中经典的思想和设计模式,融入了工厂模式,反射机制等等一些思想。采用 Model +...
5.增加了按"表名"搜索功能,并且选中表名可以打开代码生成器。 6.数据类型映射的配置功能完善。 7.新建项目,选择VS版本的位置调整。 8.修正DAL基于sql的生成方式中,UPdate方法不能更新空值的问题。 9.修正了...
.Net代码生成器是一款为C#数据库程序员设计的自动代码生成器,生成的代码基于面向对象的思想和三层架构设计,结合了Petshop中经典的思想和设计模式,融入了工厂模式,反射机制等等一些思想。采用Model+ DAL +BLL+Web...
Codematic 是一款为 C# 数据库程序员设计的自动代码生成器,Codematic 生成的代码基于基于面向对象的思想和三层架构设计,结合了Petshop中经典的思想和设计模式,融入了工厂模式,反射机制等等一些思想。...
CodeSmith 是一种基于模板的代码生成工具,它使用类似于 ASP.NET 的语法来生成任意类型的... CodeSmith 是一种语法类似于asp.net的基于模板的代码生成器,程序可以自定义模板,从而减少重复编码的劳动量,提高效率。
CodematicDemoF3 是一个基于工厂模式的三层架构示例项目源码,基于VS2005 SP1开发,结构更简洁,提供更多有效的示例源码参考。方便用户更好的理解和使用该架构进行开发,配合动软Codematic代码生成器,可以使开发...
动软.Net代码生成器Codematic 是一款为C#数据库程序员设计的自动代码生成器,Codematic 生成的代码基于面向对象的思想和三层架构设计,结合了Petshop中经典的思想和设计模式,融入了工厂模式,反射机制等等一些思想...
可以生成3种不同架构的代码:简单三层结构;基于工厂模式三层架构;自定义结构模版 可以生成页面Html代码和页面.cs处理代码 支持父子表的(事务)的代码生成 可以自定义选择生成的字段 可以自由设定命名空间和实体类名...
动软.Net代码生成器Codematic 是一款为C#数据库程序员设计的自动代码生成器,Codematic 生成的代码基于面向对象的思想和三层架构设计,结合了Petshop中经典的思想和设计模式,融入了工厂模式,反射机制等等一些思想...
8.10 TINY代码生成器的简单优化 366 8.10.1 将临时变量放入寄存器 366 8.10.2 在寄存器中保存变量 367 8.10.3 优化测试表达式 367 练习 368 编程练习 371 注意与参考 372 附录A 编译器设计方案 373 附录B 小型编译器...