python统计图的三层结构设计代码_自动生成三层结构代码(1)概述和准备工作...

版权所有:基础软件。作者邮箱:sun.j.l.studio@gmail.com。本文首发于 http://www.cnblogs.com/FoundationSoft。文章转载请保持此版权信息并注明出处。

最近做一小程序,使用.NET Framework 2.0。程序很小,数据库中主要只有3个表。

由于上述两原因,一是.NET版本低,二是程序确实很小,就没有使用ORM框架,而是打算手写ADO.NET代码,毕竟工作量也不大。

结果写了将近2个表的数据访问层代码以后,感觉写重复代码太多,还不如写个工具自动生成呢,这样节约出来的时间也抵得上写工具本身的时间了,而且这个工具写出来以后还可以继续用。而且,还可以给学生当作毕业设计题目。

写这个工具以前,也从网上找了类似源码。这些源码毕竟是现成的东西,生成的代码与我手写的代码风格不一样。好在这个工具工作量不大,就自己写好了。自己写得看着最舒服,用着最顺心。于是就写了一个自动生成三层结构代码的工具,此工具可以生成实体类、数据访问层、业务逻辑层代码。其实主要是前二者,业务逻辑层只是一个代码框架,调用数据访问层的相关方法,程序不可能智能到能够获取和实现业务逻辑的。

今天写了一部分,可以生成实体类代码和数据访问层的INSERT和UPDATE功能。就尽量讲得详细一点吧。

本程序的功能前面已经说过了。不过生成的代码是基于Enterprise Library的,其实仅用到了其中的一个类Database。这个类的功能就是封装了一些常用的ADO.NET代码。如果你不使用Enterprise Library,则很容易把我代码修改一下,换成原始的ADO.NET代码。如果你也用原始的ADO.NET代码写程序,或者使用Enterprise Library写程序,那么这个工具可以实用。但是更重要的,还是通过这个例子交流思想,体会这种最简单的自动代码生成工具的实现。授人以鱼不如授人以渔。

首先来点铺垫,这个类与具体代码生成无关,但是在代码生成时会用到,只有3条代码。

代码

//数据库工具类,封装一些常用功能///孙继磊///publicstaticclassDbUtility

{conststringConnectionKey="db";//根据配置文件中ConnectionString中名称为db连接字符串返回一个Database对象//这个Database是EnterpriseLibrary中定义的类publicstaticDatabase getDatabase()

{returnDatabaseFactory.CreateDatabase(ConnectionKey);

}

}

索性把配置文件也贴上来,大多数人都知道什么内容,就跳过吧。

下面这自动生成代码的类。类名叫AutoDatabase,名字先随便起的,不太合适,以后再改。先看类中定义的成员变量和构造函数。

1 ///2 ///自动代码生成类3 ///孙继磊,sun.j.l.studio@gmail.com4 ///5 6 publicsealedclassAutoDatabase7 {8 #region成员变量9 stringtable;//数据库表名10 boolschemaLoad=false;//数据库表架构是否已经加载11 DataColumn[] allColumns=null;//表中所有列的集合12 DataColumn[] primaryKey=null;//表的主键13 DataColumn[] notKeyColumns=null;//非主键列14 string[] columnNames=null;//列名数组15 conststringDalCalssSuffix="Dal";//数据访问层类名后缀16 #endregion17 18 19 #region构造函数20 publicAutoDatabase(stringtableName)21 {22 table=tableName;23 getTableSchema();24 }25 #endregion

下面一个方法获得表构架。

1 #region得到表架构,获得所有列信息,获得的信息保存在成员变量中2 3 privatevoidgetTableSchema()4 {5 if(schemaLoad )return;//如果已经加载,则不重复加载6 //以下代码获取表架构7 Database db=DbUtility.getDatabase();8 DbCommand command=db.GetSqlStringCommand("select * from"+table+"where 1=2");9 command.Connection=db.CreateConnection();10 DbDataAdapter a=db.GetDataAdapter();//得到数据适配器11 a.SelectCommand=command;12 DataTable dataTable=newDataTable();13 a.FillSchema(dataTable, SchemaType.Source);//用数据适配器填充表构架14 command.Dispose();15 //将表架构列信息保存到成员变量中备用16 allColumns=newDataColumn[dataTable.Columns.Count];17 primaryKey=dataTable.PrimaryKey;//获得主键列18 notKeyColumns=newDataColumn[allColumns.Length-primaryKey.Length];19 intn=allColumns.Length;20 columnNames=newstring[n];21 ListnotKeys=newList();22 //下面的循环获取非主键列23 for(inti=0; i(primaryKey, column)<0)29 notKeys.Add(column);30 }31 notKeyColumns=notKeys.ToArray();32 }33 #endregion

内容不少了,先到这里,转下一篇。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值