从数据库(这里主要用Oracle数据库),读取相应的表结构(如表名、列名、列类型、列注释等),然后读取模板(用txt写的模板),最后通过匹配生成目标代码。
二 代码解释2.1 文件解释2.2 解析方式using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace [XXX]
{
public class [table_name]
{
public [table_name]()
{
}
/// summary
/// [table_name]构造函数
/// /summary
!--/// param [col_name] /param
--
public [table_name]( !--[col_type] v_[col_name][,]-- )
{
!--this._[col_name] = v_[col_name];
--
}
!--
/// summary
/// [col_name]
/// /summary
private [col_type] _[col_name];
public [col_type] [col_name]
{
get { return this._[col_name]; }
set { this._[col_name] = value; }
}
--
}
}
App.config(配置数据库连接),以T_[filename].txt为模板,规则如下:
[XXX]暂时不考虑
!-- -- 标识符里的为可循环内容
[table_name]、[col_name]、[col_type]、[col_comment]、[create_time]、[,]、[col_comment]为可替换内容
解析顺序:
1. 读取数据库所有表 或 根据SQL语句,将表结构放入一个List TableObject 结构里
2. 读取全文
3. 读取 !-- -- 内容,以取代 [table_name]、[col_name]、[col_type]、[col_comment]、[create_time]、[,]
4. 继续读取,以取代[table_name]、 !-- --
5. 输出[table_name].cs文件
2.3 以T_为开头的模板文件/*****************************************-- create by: zhyongfeng-- create date: [create_time]-- fun:-- P_CONDITION:where条件-- P_TYPE:是否分页-- P_CUR_PAGE:-- P_PAGE_SIZE:每页记录数-- X_TOT_REC:总记录数-- X_TOT_PAGE:总页数-- X_CUR:输出*****************************************/procedure [table_name]_Info_Select(P_CONDITION in Varchar2,P_TYPE varchar2,P_CUR_PAGE integer,P_PAGE_SIZE integer,P_SORT varchar2,P_DIR varchar2,X_TOT_REC out integer,X_TOT_PAGE out integer,X_CUR out curtype) asV_SQL long;V_TOT_REC integer;V_TOT_PAGE integer;beginV_SQL := 'select !--e.[col_name][,] -- from [table_name] e';exceptionWhen others thenrollback;dbms_output.put_line('异常提示:'||sqlcode||':'||sqlerrm);/*****************************************-- create by: zhyongfeng-- create date: [create_time]-- fun:增加 !-- -- P_[col_name]:[col_comment]-- X_RE:输出-- X_MSG:输出*****************************************/procedure [table_name]_Add( !-- P_[col_name] in [col_type],-- X_RE out integer,X_MSG out varchar2) isV_COUNT integer;begin--新增数据insert into [table_name]( !--[col_name][,]-- )values(SEQ_EXAM_QUESTION.Nextval !--[,]-- X_RE := 1;X_MSG := '提示:新增成功!';commit;exceptionwhen others thenrollback;X_RE := 9;X_MSG := '操作失败:['||sqlcode||':'||sqlerrm||']';dbms_output.put_line('异常提示:'||sqlcode||':'||sqlerrm);/*****************************************-- create by: zhyongfeng-- create date: [create_time]-- fun:编辑 !-- -- P_[col_name]:[col_comment]-- X_RE:输出-- X_MSG:输出*****************************************/procedure [table_name]_Edit( !-- P_[col_name] in [col_type],-- X_RE out integer,X_MSG out varchar2) isV_COUNT integer;begin--更新数据update [table_name] set !-- [col_name]= P_[col_comment][,]where 1=1;X_RE := 1;X_MSG := '提示:更新成功!';commit;exceptionwhen others thenrollback;X_RE := 9;X_MSG := '操作失败:['||sqlcode||':'||sqlerrm||']';dbms_output.put_line('异常提示:'||sqlcode||':'||sqlerrm);/*****************************************-- create by: zhyongfeng-- create date: [create_time]-- fun: 删除-- 编号:编号-- X_RE:输出-- X_MSG:输出*****************************************/procedure [table_name]_Delete(编号 in number,X_RE out integer,X_MSG out varchar2) isV_COUNT integer;begindelete from [table_name] where 编号=编号;X_RE := 1;X_MSG := '提示:删除成功!';commit;exceptionwhen others thenrollback;X_RE := 9;X_MSG := '操作失败:['||sqlcode||':'||sqlerrm||']';dbms_output.put_line('异常提示:'||sqlcode||':'||sqlerrm);end;三 效果演示
原理比较简单,主要通过自己制定一些可识别的字符串,并进行正则匹配,生成相应的目标代码。这样子做的好处是:
在编写数据库包、触发器、存储过程中,均可以提高编写代码效率、提高编写代码的准确度。
在Web UI or DotNet众多技术框架中,实现了以数据库为主,代码字段or对象实例的动态创建,节约了开发者的时间和效率。
五 源代码提供5.1、运行环境系统:win7/windows xp
IDE工具:VS2008
版本:.net framework3.5
5.2、源代码源代码:https://files.cnblogs.com/yongfeng/OracleDataBase_Object_Creater.rar
可执行文件:https://files.cnblogs.com/yongfeng/OracleTemplateCodeCreater.rar
视频预览:http://v.youku.com/v_show/id_XNDk4MjIwNzIw.html
注意:需要设置一下OracleDataBase_Object_Create.exe.config的Oracle数据库数据源,否则连接不上数据库,里面有源代码、执行文件。