Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4157
  • 博文数量: 2
  • 博客积分: 65
  • 博客等级: 民兵
  • 技术积分: 30
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-15 18:11
文章分类
文章存档

2012年(2)

我的朋友
最近访客

分类: WINDOWS

2012-01-15 18:11:11

GoGo代码生成器 1.0 发布
得闲写了个代码生成工具【GoGo】,这是一个免费的代码生成工具,它基于模板生成代码,脚本语言为C#

=====================================================================================================================================

GoGo代码生成器

 

1.         关于gogo

gogo是一个免费的代码生成工具,它基于模板生成代码,脚本语言为C#

 

2.         认识gogo

2.1.             gogo工作原理

              gogo的工作原理如下图所示,

 

3.         如何使用

3.1.        编写模板脚本

3.1.1.       gogo模板组成:

gogo模板文件使用C#编写,由以下7部分组成:

1.       环境变量区域:设置模板执行使用的环境变量

2.       模板嵌套区域:包含其他模板文件

3.       Using区域:添加名称空间引用

4.       变量赋值区域:为脚本作为表达式并计算结果赋值给变量

5.       Script区域:自定义函数

6.       执行脚本区域:模板的脚本区域

7.       文本区域:该区域的文本不经过处理,原样输出

如下图所示:

 

3.1.2.       gogo模板内置变量及方法

gogo模板可使用的内置变量继承于模板基类,参考如下图,该图描述了模板中可以使用的内置变量和方法:

在内置变量TableSchema中,访问个字段属性时请使用DBColumn类型,该类型继承于DataColumn,添加了DbTypeIsPKMemo属性,如下图所示:

            

3.1.3.       示例模板 《存储过程.gen

<%@ OutFile=sp.sql OutMode=Append %>

/******对象:  StoredProcedure [<%=TableSchema.TableName%>_Update] 脚本日期: <%=DateTime.Now.ToString()%> ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[<%=TableSchema.TableName%>_Update]') AND type in (N'P', N'PC'))

BEGIN

EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [<%=TableSchema.TableName%>_Update]

<%int index=0;  foreach(DBColumn col in TableSchema.Columns){%>

<%if(index>0)%>,

    @<%=col.ColumnName%> [<%=col.Dbtype%>] <%if(col.MaxLength!=-1){%>(<%=col.MaxLength%>)<%}%>

<%index++;}%>

WITH EXECUTE AS CALLER

AS

update [<%=TableSchema.TableName%>] set

<%index=0; foreach(DBColumn col in TableSchema.Columns){

 if(!col.IsPK){%>

<%if(index>0)%>,

    [<%=col.ColumnName%>]=@<%=col.ColumnName%>

<%index++;}

}%>

where

<%index=0;foreach(DBColumn col in TableSchema.Columns){

 if(col.IsPK){ %>

    <%if(index>0){%> and <%}%>[<%=col.ColumnName%>]=@<%=col.ColumnName%>

<%

     index++;

   }

}%>

'

END

GO

 

/****** 对象:  StoredProcedure [<%=TableSchema.TableName%>_Add] 脚本日期: <%=DateTime.Now.ToString()%> ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[<%=TableSchema.TableName%>_Add]') AND type in (N'P', N'PC'))

BEGIN

EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [<%=TableSchema.TableName%>_Add]

<%index=0; foreach(DBColumn col in TableSchema.Columns){

if(!col.AutoIncrement){%>

<%if(index>0)%>,

    @<%=col.ColumnName%> [<%=col.Dbtype%>] <%if(col.MaxLength!=-1){%>(<%=col.MaxLength%>)<%}%>

<%index++;}

}%>

WITH EXECUTE AS CALLER

AS

Insert into [<%=TableSchema.TableName%>]

(

<%index=0;  foreach(DBColumn col in TableSchema.Columns){

  if(!col.AutoIncrement){%>

<%if(index>0)%>,

    [<%=col.ColumnName%>]

<%index++;}

  }%>

)

values

(

<%index=0;  foreach(DBColumn col in TableSchema.Columns){

  if(!col.AutoIncrement){%>

<%if(index>0)%>,

    @<%=col.ColumnName%>

<%index++;}

  }%>

)

'

END

GO

 

/******对象:  StoredProcedure [<%=TableSchema.TableName%>_Delete] 脚本日期: <%=DateTime.Now.ToString()%> ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[<%=TableSchema.TableName%>_Delete]') AND type in (N'P', N'PC'))

BEGIN

EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [<%=TableSchema.TableName%>_Delete]

<%index=0; foreach(DBColumn col in TableSchema.Columns){

  if(col.IsPK) {%>

<%if(index>0)%>,

    @<%=col.ColumnName%> [<%=col.Dbtype%>] <%if(col.MaxLength!=-1){%>(<%=col.MaxLength%>)<%}%>

<%index++;}

}%>

WITH EXECUTE AS CALLER

AS

Delete from [<%=TableSchema.TableName%>]

where

<%index=0; foreach(DBColumn col in TableSchema.Columns){

  if(col.IsPK) {%>

<%if(index>0)%> and

    [<%=col.ColumnName%>]=@<%=col.ColumnName%>

<%index++;}}%>

'

END

GO

 

/******对象:  StoredProcedure [<%=TableSchema.TableName%>_GetBYPK] 脚本日期: <%=DateTime.Now.ToString()%> ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'<%=TableSchema.TableName%>_GetBYPK') AND type in (N'P', N'PC'))

BEGIN

EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE <%=TableSchema.TableName%>_GetBYPK

<%index=0; foreach(DBColumn col in TableSchema.Columns){

  if(col.IsPK) {%>

<%if(index>0)%>,

    @<%=col.ColumnName%> [<%=col.Dbtype%>] <%if(col.MaxLength!=-1){%>(<%=col.MaxLength%>)<%}%>

<%index++;}

}%>

WITH EXECUTE AS CALLER

AS

select * from [<%=TableSchema.TableName%>]

where

<%index=0; foreach(DBColumn col in TableSchema.Columns){

  if(col.IsPK) {%>

<%if(index>0)%> and

    [<%=col.ColumnName%>]=@<%=col.ColumnName%>

<%index++;}}%>

'

END

GO

 

3.2.        新建gogo项目

 

附件:
 gogo_bin.rar  
阅读(442) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:循环buffer【circle buffer】

给主人留下些什么吧!~~