zoukankan      html  css  js  c++  java
  • CodeSmith快速入门之三:数据库我来也

    在【CodeSmith快速入门之一:初次接触CodeSmith】和【CodeSmith快速入门之二:输入参数和方法】中,我们介绍了CodeSmith最基本的使用,
    但是代码生成器最主要的功能就是根据数据库中的表,产生相应层次中的代码。
    那么在模板中怎么访问数据库呢,本次我将对你一一道来

    在NET中,访问数据库的组件是ADO.NET,而在CodeSmith中有没有相应的组件呢?
    当然,这就是SchemaExplorer
    SchemaExplorer中常用的对象
    --DatabaseSchema:数据库
    --TableSchema:表
    --ColumnSchema:列
    --ViewSchema:视图
    --……

    那么接下来带大家实现获得某个表中所有列的信息。

    1、新建C#模板,去掉原始内容并保存取名为“TableInfo.cst”

    2、添加模板声明以及输入参数

    <%@ CodeTemplate Language="C#" TargetLanguage="Text" ResponseEncoding="UTF-8"  Description="获得某个表的所以列"%>
    <%Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="内容" Description="数据源表" %>
    TargetLanguage:目标语言,指生成后的方式,如:C#、T-SQL等。

    Type数据类型为SchemaExplorer.TableSchema,表明参数SourceTable是一个表对象。

    点击编译后,发生了错误
     

    这不就是NET中没有引用和导入组件的意思吗,那么CodeSmith中怎么做呢?

    3、引用和导入SchemaExplorer组件

    <%@ CodeTemplate Language="C#" TargetLanguage="TextResponseEncoding="UTF-8" Description="获得某个表的所以列"%>
    <%Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="内容" Description="数据源表" %>
    <%@ Assembly Name="SchemaExplorer" %>
    <%@ Import Namespace="SchemaExplorer" %>

    <%@ Assembly Name="组件名"%>:引用组件,等同于程序中的添加引用
    <%@ Import Namespace="组件名"%>:导入组件,等同于程序中的using

    4、编写【根据表获得所有列信息】的方法

    <script runat="template">
        public 
    void PrintColumnsByTable(TableSchema table)
        {
            foreach(ColumnSchema col 
    in table.Columns)
            {
                Response.WriteLine(col.Name);
            }
        }
    </script>

    用ColumnSchema(列)对象遍历传入的表中的所有列,输出列名

    5、编写输出代码

    <%@ CodeTemplate Language="C#" TargetLanguage="TextResponseEncoding="UTF-8" Description="获得某个表的所以列"%>
    <%Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="内容" Description="数据源表" %>
    <%@ Assembly Name="SchemaExplorer" %>
    <%@ Import Namespace="SchemaExplorer" %>

    您所选择的表为:
    <%=SourceTable.Name%>
    表中包含以下列:
    <% PrintColumnsByTable(SourceTable); %>

    <script runat="template">
        public 
    void PrintColumnsByTable(TableSchema table)
        {
            foreach(ColumnSchema col 
    in table.Columns)
            {
                Response.WriteLine(col.Name);
            }
        }
    </script>

    6、设置表对象













    最后,我们选择了EmployeeInfo表

    10、运行,查看结果
    您所选择的表为:EmployeeInfo
    表中包含以下列:
    EmpID
    LoginID
    Password
    Role
    EmpName

    呵呵,怎么样,我们成功获得了选中表中的列信息。
    在下一次,我将告诉大家来编写【模型层】的模板,谢谢!

  • 相关阅读:
    QT 信号槽 异步事件驱动 单线程 多并发
    Qt 静态库与共享库(动态库)共享配置的一个小办法
    关于:有符号与无符号整数的大小比较
    QT信号槽 中的对象野指针
    Qt程序打包发布
    Qt程序打包发布
    SQL Server 2012 sa 用户登录 18456 错误 (转)
    QtCreator常用之快捷键
    opengl中相关的计算机图形变换矩阵之:模型视图几何变换
    opengl中相关的计算机图形变换矩阵之:齐次坐标 (摘编)
  • 原文地址:https://www.cnblogs.com/juan/p/1424376.html
Copyright © 2011-2022 走看看