上一篇读取了一个表的内容,但是到了真正应用的时候还是不够用的,我们很容易可以对比出来,SQL里边的数据类型的定义和C#中有所不同,比如Saler--String,大写的String在C#中不是一个类型,所以在这里我们要进行转换一下,还有有的时候我们要加一些操作的逻辑,但这个逻辑不只在一个地方会使用到,这时候我们就可以建一个方法来调用。

在CodeSmith中创建方法要把方法放在<script runat="template">……</script>这个标签中,template我理解为运行在模板中的,所以他可以用来定义方法。如下方式:

<script runat="template">

public string Test()

{

return "测试";

}

</script>

这样就创建了一个Test的方法,调用的时候和之前一样使用<%= Test() %>,需要注意的是,这里括号后边没有分号,<%= Test(); %>是不对的。

下面是一个数据库类型转C#数据类型的方法,这个是从网上搜集来的。

/// <summary>
/// 将数据库类型转化为C#类型
/// </summary>
/// <param name="dbType">数据库类型</param>
/// <returns>C#类型</returns>
public string DataTypeToCSharpType(System.Data.DbType dbType)
{
switch (dbType)
{
case DbType.AnsiString:
return "string";
case DbType.AnsiStringFixedLength:
return "string";
case DbType.Binary:
return "byte[]";
case DbType.Boolean:
return "bool";
case DbType.Byte:
return "byte";
case DbType.Currency:
return "decimal";
case DbType.Date:
return "DateTime";
case DbType.DateTime:
return "DateTime";
case DbType.DateTime2:
return "DateTime";
case DbType.DateTimeOffset:
return "DateTime";
case DbType.Decimal:
return "decimal";
case DbType.Double:
return "double";
case DbType.Guid:
return "Guid";
case DbType.Int16:
return "short";
case DbType.Int32:
return "int";
case DbType.Int64:
return "long";
case DbType.Object:
return "object";
case DbType.SByte:
return "sbyte";
case DbType.Single:
return "float";
case DbType.String:
return "string";
case DbType.StringFixedLength:
return "string";
case DbType.Time:
return "TimeSpan";
case DbType.UInt16:
return "ushort";
case DbType.UInt32:
return "uint";
case DbType.UInt64:
return "ulong";
case DbType.VarNumeric:
return "decimal";
case DbType.Xml:
return "string";
default:
return "object";
}
}

有了它我们就可以像这样调用了

<%foreach(ColumnSchema col in SourceTable.Columns){ %>

public <%= DataTypeToCSharpType(col.DataType) %> <%= col.Name %> { get;set; }

<% } %>

本篇示例模板:

<%--

Name: 测试模板3

Author: GodFinal

Description:

--%>

<%@ Template Language="C#" TargetLanguage="SQL" Description="连接SQL数据库,并读取表结构" Debug="True"%>

<%@ Assembly Name="SchemaExplorer" %>

<%@ Import Namespace="SchemaExplorer" %>

<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="表" Description="要操作的表" %>

using System;

namespace GodFinal

{

/// <summary>

/// <%=ClassName %>[实体]

/// </summary>

public class <%=ClassName %>

{

<%foreach(ColumnSchema col in SourceTable.Columns){ %>

public <%= DataTypeToCSharpType(col.DataType) %> <%= col.Name %> { get;set; }

<% } %>

}

}

<script runat="template">

/// <summary>

/// 将数据库类型转化为C#类型

/// </summary>

/// <param name="dbType">数据库类型</param>

/// <returns>C#类型</returns>

public string DataTypeToCSharpType(System.Data.DbType dbType)

{

switch (dbType)

{

case DbType.AnsiString:

return "string";

case DbType.AnsiStringFixedLength:

return "string";

case DbType.Binary:

return "byte[]";

case DbType.Boolean:

return "bool";

case DbType.Byte:

return "byte";

case DbType.Currency:

return "decimal";

case DbType.Date:

return "DateTime";

case DbType.DateTime:

return "DateTime";

case DbType.DateTime2:

return "DateTime";

case DbType.DateTimeOffset:

return "DateTime";

case DbType.Decimal:

return "decimal";

case DbType.Double:

return "double";

case DbType.Guid:

return "Guid";

case DbType.Int16:

return "short";

case DbType.Int32:

return "int";

case DbType.Int64:

return "long";

case DbType.Object:

return "object";

case DbType.SByte:

return "sbyte";

case DbType.Single:

return "float";

case DbType.String:

return "string";

case DbType.StringFixedLength:

return "string";

case DbType.Time:

return "TimeSpan";

case DbType.UInt16:

return "ushort";

case DbType.UInt32:

return "uint";

case DbType.UInt64:

return "ulong";

case DbType.VarNumeric:

return "decimal";

case DbType.Xml:

return "string";

default:

return "object";

}

}

</script>

最终结果:

using System;

namespace GodFinal

{

/// <summary>

/// tb_sys_user[实体]

/// </summary>

  public class tb_sys_user

  {

public int id { get;set; }

public string CPlace { get;set; }

public string Saler { get;set; }

public string Company { get;set; }

public string Department { get;set; }

public string Account { get;set; }

public string telephone { get;set; }

public string email { get;set; }

public string Address { get;set; }

public string Zipcode { get;set; }

public string Level { get;set; }

}

}

CodeSmith使用总结--调用自定义方法的更多相关文章

  1. 开源项目asmjit——调用自定义方法demo以及windbg调试

    asmjit是一个开源项目,使用它可以将代码即时的编译成机器码,也就是所谓的jit技术. 初次接触这个项目,编写了一个demo,学习它的使用方法. 现将编写的demo以及调试jit生成的机器码的过程总 ...

  2. wx: wx.showModal 回调函数中调用自定义方法

    一.在回调函数中调用自定义方法: 回调函数中不能直接使用this,需要在外面定义 var that = this 然后 that.自定义的方法.如下: //删除 onDelete: function ...

  3. 关于jsp的action如何调用servlet的自定义方法

    一.起因: 希望将同属于某个模块的简单功能整合到一起,不创建太多的servlet 二.问题描述: action或者method属性是否能直接调用自定义方法 三.补充知识点: 查询得知:servelet ...

  4. [Unity3D]Unity+Android交互教程——让手机"动"起来

    想要用Unity实现一个二维码扫描的功能,然后网上找插件,找到一个貌似叫EasyCodeScanner,但下载下来用用,真不好使,一导入运行就报错,调好错了再运行发现点按钮没反应,反复试了几遍发现还是 ...

  5. Socket 类通信例子-第24章

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. 慕课网-Java入门第一季-7-4 编程练习

    来源:http://www.imooc.com/code/1634 小伙伴们,请根据所学知识,参考注释,在代码编辑器中将代码补充完整.编写一个 Java 程序,实现输出学生年龄的最大值 要求: 1. ...

  7. 4、C#进阶:MD5加密、进程、线程、GDI+、XML、委托

    MD5加密 将字符串进行加密,无法解密.网上的解密方式也都是在库里找,找不到也没有. 1 protected void Page_Load(object sender, EventArgs e) 2 ...

  8. 小记初试tornado与ajax,一些注意点

    一. 在 tornado模板中使用自定义方法 在tornado中可以使用两种方式,达到在模板中调用自定义方法的效果,第一种是使用UIMethod 和UIModule. 1.UIMethod使用方法示例 ...

  9. 我的第一篇Markdown语法博客

    这是我的第一篇使用markdown语法编写的博客 使用的编辑器为Sublime Text2 并且使用了sublog插件, sublog是一个开源项目 sublog 并且参考了作者的博客 AmongOt ...

随机推荐

  1. Linux命令之必杀绝技Vi文本编辑的使用

    vi  文本编辑器 语法:vi [参数] 文件 进入vi全屏幕编辑画面 按字母i进入[输入模式],按[ESC]转到命令行, 输入 :q可不保存退出vi :wq存盘退出vi :q!不存盘强制退出 :w ...

  2. CSS背景特殊属性值

    CSS代码示例-背景附着属性(background-attachment)-[背景图固定不动,不跟随滚动条滚动]:<html><head><title>背景附着属性 ...

  3. WPF合并资源字典

    1.合并多个外部资源字典成为本地字典 示例代码 <Page.Resources> <ResourceDictionary> <ResourceDictionary.Mer ...

  4. 使用Alcatraz为Xcode安装XActivatePowerMode插件, 从此敲代码逼格大大滴~

    Alcatraz 是一款 Xcode的插件管理工具,可以用来管理XCode的 插件.模版以及颜色配置的工具. 关于Alcatraz的安装,这里有一篇不错的博文,请参考安装:http://www.cnb ...

  5. java下tcp的socket连接

    serverDemo package cn.stat.p4.ipdemo; import java.io.IOException; import java.io.InputStream; import ...

  6. 转自:Tsihang 三层网络设备对于IP报文的分片和重组处理原理

    三层网络设备对于IP报文的分片和重组处理原理 对于网络分片,我一年前就想整理出来,虽然说网络上的资料很多,但是真正掌握精髓的除非真正做过分片程序,不然很难将协议栈整体联系起来理解.这篇文章,包括设计分 ...

  7. Apache之AllowOverride参数详解

    通常利用Apache的rewrite模块对 URL 进行重写的时候, rewrite规则会写在 .htaccess 文件里.但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对 ...

  8. Thinking in Java——笔记(21)

    Concurrency However, becoming adept at concurrent programming theory and techniques is a step up fro ...

  9. Android手机SSH Client客户端推荐JuiceSSH

    Windows上建立ssh服务器 参见: http://www.cnblogs.com/xred/archive/2012/04/21/2461627.html Android手机SSH Client ...

  10. android:layout_weight属性的简单使用

    效果: style.xml <style name="etStyle2"> <item name="android:layout_width" ...