用CodeSmith生成SQL

CodeSmith 是一个代码生成工具,你可以用它生成一小段代码片断,也可以用它生成整个工程。CodeSmith采用ASP.NET的模板语法,其过程也都是先将模板转化成C#代码文件,然后编译运行C#代码文件。

 

在做Web项目时,如果你不用Hibernate之类的ORM工具的话,经常要写SQL语句,稍不注意就会写错,这时可以用CodeSmith来帮助生成SQL语句。

 

首先需要建立一个模板文件,模板文件以cst(CodeSmith Template)结尾。每个模板文件可以接受一个或多个参数,对于我这里的例子,只需要接收一个Table参数,代表为哪个表生成SQL语句。CodeSmith提供SchmeExplorer来写数据库进行集成,点击View-> Scheme Explorer可以添加数据库。模板文件开头:

 

<%@ CodeTemplate Language="C#" ResponseEncoding="UTF-8"%>
<%@ Property Name="Table" Type="SchemaExplorer.TableSchema" Default="" Optional="False" %>

<%@ Assembly Name="System.Data" %>
<%@ Assembly Name="SchemaExplorer" %> 
<%@ Import Namespace="System.Data" %> 
<%@ Import Namespace="SchemaExplorer" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="System.Text" %>
 

第一行声明了模板使用的语言,这里使用C#,还可以使用VB。第二行声明了模板接收的参数,参数名为Table,类型为TableSchema,这是CodeSmith内建的一个类型。接下的几行指定了依赖的Assembly,以及要导入的命名空间。

 

SELECT <%=SelectStat(Table.Columns)%>
FROM <%=Table.Name%>

<script runat="template">
public string SelectStat(ColumnSchemaCollection columns)
{
	StringBuilder sb = new StringBuilder();
	for (int i = 0; i < columns.Count; i++) {
		ColumnSchema col = columns[i];
		sb.Append(col.Name);
		if (i < columns.Count-1)
			sb.Append(", ");
	}
	return sb.ToString();
}
</script>
 

CodeSmith模板的格式和ASP.NET很相近,嵌入代码是放在<%..%>之间,块代码<script>...</script>之间,只是runat不是server而是template。

 

创建完成之后,在Properties窗口设置Table参数的值,点击值区域会弹出对话框让你选择数据库表,你首先得在Scheme Explorer添加数据库才行。然后点击工具栏上Run按钮或者F5,就可以得到模板运行之后的结果。

 

你还可以添加Insert,Update,甚至存储过程,还可以根据项目习惯生成其它代码,例如如何调用SQL,如何给SQL添加参数。CodeSmith还可以做得更多,我使用CodeSmith生成对所有参考表的CRUD方法。CodeSmith自带的模板还可以生成整个项目。

 

你可能感兴趣的:(sql,SQL Server,Scheme,asp.net,asp)