(转)代码生成器让你抓狂,结束你选择,就是如此简单!

代码生成器是提高生产力的工具,目前的代码生成器太多了,CodeSmith,MyGeneration,动软,应该是目前用的比较多的几个代码生成器,但是东西往往不尽人意,复杂的东西太麻烦,简单的又不灵活,我现在像大家介绍一个简单而有强大的代码生成方法,简单的你无法想象,我前段时间也在写代码生成器,发现有几种方法可以实现代码生成器,一种是用字符串直接连接起来,这个可太难看,而且应该要修改也不方便,还有就是模板生成,用模板来生成,这个好.简单有灵活,我现在介绍另一种方法就是xml+xslt来生成代码,这个相当强大,只需要2个文件就可以搞定你的代码生成器,一个xml文件,还有就是一个xslt文件,xml文件大家都知道是什么,我就不用介绍了,xslt就是xml的样式文件,大家应该看过很多.xml结尾的网站,这些网站需要输出网页的风格就需要xslt来格式化,否则只能看到一个xml文档,下面我们开始吧.

第一点我们需要一个xml文件,这个xml你可以用c#来生成大致的结构是如下

 

<? xml version="1.0" encoding="UTF-8" ?>
< Root >
    
< Table >
        
<!--    名称空间    -->
        
< NameSpace > NameSpace </ NameSpace >
        
<!--    类名    -->
        
< ClassName > ClassName </ ClassName >
        
<!--    表名    -->
        
< TableName > TableName </ TableName >
        
<!--    时间    -->
        
< DateTime > DateTime </ DateTime >
        
<!--    主键    -->
        
< PrimaryKey >
            
< FieldName >
                
< Field > Field </ Field >
                
< Key > true </ Key >
                
< Identity > true </ Identity >
                
< DataType > int </ DataType >
                
< DbType > Int </ DbType >
                
< Length > 4 </ Length >
                
< isNull > false </ isNull >
                
< DefualtValue ></ DefualtValue >
                
< ColumnDescription > 员工ID </ ColumnDescription >
            
</ FieldName >
            
< FieldName >
                
< Field > Field1 </ Field >
                
< Key > true </ Key >
                
< Identity > true </ Identity >
                
< DataType > int </ DataType >
                
< DbType > Int </ DbType >
                
< Length > 4 </ Length >
                
< isNull > false </ isNull >
                
< DefualtValue ></ DefualtValue >
                
< ColumnDescription > 员工ID </ ColumnDescription >
            
</ FieldName >
        
</ PrimaryKey >
        
<!--    自动增长    -->
        
< Identity >
            
< FieldName >
                
< Field > Field </ Field >
                
< Key > false </ Key >
                
< Identity > true </ Identity >
                
< DataType > int </ DataType >
                
< DbType > Int </ DbType >
                
< Length > 4 </ Length >
                
< isNull > false </ isNull >
                
< DefualtValue ></ DefualtValue >
                
< ColumnDescription > 员工ID </ ColumnDescription >
            
</ FieldName >
        
</ Identity >
        
<!--    字段详细内容    -->
        
< DataField >
            
< FieldName >
                
< Field > EmployeeID </ Field >
                
< Key > true </ Key >
                
< Identity > true </ Identity >
                
< DataType > int </ DataType >
                
< DbType > Int </ DbType >
                
< Length > 4 </ Length >
                
< isNull > false </ isNull >
                
< DefualtValue ></ DefualtValue >
                
< ColumnDescription > 员工ID </ ColumnDescription >
            
</ FieldName >
            
< FieldName >
                
< Field > LastName </ Field >
                
< Key > false </ Key >
                
< Identity > false </ Identity >
                
< DataType > string </ DataType >
                
< DbType > NvarChar </ DbType >
                
< Length > 20 </ Length >
                
< isNull > false </ isNull >
                
< DefualtValue > "" </ DefualtValue >
                
< ColumnDescription > 名称ID </ ColumnDescription >
            
</ FieldName >
            
< FieldName >
                
< Field > FirstName </ Field >
                
< Key > false </ Key >
                
< Identity > false </ Identity >
                
< DataType > string </ DataType >
                
< DbType > NvarChar </ DbType >
                
< Length > 10 </ Length >
                
< isNull > false </ isNull >
                
< DefualtValue > "" </ DefualtValue >
                
< ColumnDescription > </ ColumnDescription >
            
</ FieldName >
            
< FieldName >
                
< Field > BirthDate </ Field >
                
< Key > false </ Key >
                
< Identity > false </ Identity >
                
< DataType > DateTime </ DataType >
                
< DbType > DateTime </ DbType >
                
< Length ></ Length >
                
< isNull > false </ isNull >
                
< DefualtValue > getdate() </ DefualtValue >
                
< ColumnDescription > 生日 </ ColumnDescription >
            
</ FieldName >
            
< FieldName >
                
< Field > Sex </ Field >
                
< Key > false </ Key >
                
< Identity > false </ Identity >
                
< DataType > string </ DataType >
                
< DbType > NvarChar </ DbType >
                
< Length > 1 </ Length >
                
< isNull > true </ isNull >
                
< DefualtValue > "" </ DefualtValue >
                
< ColumnDescription > 性别 </ ColumnDescription >
            
</ FieldName >
            
< FieldName >
                
< Field > Address </ Field >
                
< Key > false </ Key >
                
< Identity > false </ Identity >
                
< DataType > string </ DataType >
                
< DbType > NvarChar </ DbType >
                
< Length > 200 </ Length >
                
< isNull > false </ isNull >
                
< DefualtValue > "" </ DefualtValue >
                
< ColumnDescription > 地址 </ ColumnDescription >
            
</ FieldName >
            
< FieldName >
                
< Field > Company </ Field >
                
< Key > false </ Key >
                
< Identity > false </ Identity >
                
< DataType > string </ DataType >
                
< DbType > NvarChar </ DbType >
                
< Length > 100 </ Length >
                
< isNull > false </ isNull >
                
< DefualtValue > "" </ DefualtValue >
                
< ColumnDescription > 公司 </ ColumnDescription >
            
</ FieldName >
            
< FieldName >
                
< Field > Age </ Field >
                
< Key > false </ Key >
                
< Identity > false </ Identity >
                
< DataType > int </ DataType >
                
< DbType > int </ DbType >
                
< Length > 4 </ Length >
                
< isNull > false </ isNull >
                
< DefualtValue > "" </ DefualtValue >
                
< ColumnDescription > 年龄 </ ColumnDescription >
            
</ FieldName >
            
< FieldName >
                
< Field > Phone </ Field >
                
< Key > false </ Key >
                
< Identity > false </ Identity >
                
< DataType > string </ DataType >
                
< DbType > NvarChar </ DbType >
                
< Length > 30 </ Length >
                
< isNull > true </ isNull >
                
< DefualtValue > "" </ DefualtValue >
                
< ColumnDescription > 电话 </ ColumnDescription >
            
</ FieldName >
            
< FieldName >
                
< Field > Mobile </ Field >
                
< Key > false </ Key >
                
< Identity > false </ Identity >
                
< DataType > string </ DataType >
                
< DbType > NvarChar </ DbType >
                
< Length > 20 </ Length >
                
< isNull > true </ isNull >
                
< DefualtValue > "" </ DefualtValue >
                
< ColumnDescription > 手机 </ ColumnDescription >
            
</ FieldName >
            
< FieldName >
                
< Field > UserId </ Field >
                
< Key > false </ Key >
                
< Identity > false </ Identity >
                
< DataType > int </ DataType >
                
< DbType > Int </ DbType >
                
< Length > 10 </ Length >
                
< isNull > false </ isNull >
                
< DefualtValue > 用户ID </ DefualtValue >
                
< ColumnDescription ></ ColumnDescription >
            
</ FieldName >
            
< FieldName >
                
< Field > FirstName </ Field >
                
< Key > false </ Key >
                
< Identity > false </ Identity >
                
< DataType > string </ DataType >
                
< DbType > NvarChar </ DbType >
                
< Length > 10 </ Length >
                
< isNull > false </ isNull >
                
< DefualtValue > "" </ DefualtValue >
                
< ColumnDescription > </ ColumnDescription >
            
</ FieldName >
            
< FieldName >
                
< Field > FirstName </ Field >
                
< Key > false </ Key >
                
< Identity > false </ Identity >
                
< DataType > string </ DataType >
                
< DbType > NvarChar </ DbType >
                
< Length > 10 </ Length >
                
< isNull > false </ isNull >
                
< DefualtValue > "" </ DefualtValue >
                
< ColumnDescription > </ ColumnDescription >
            
</ FieldName >
            
< FieldName >
                
< Field > FirstName </ Field >
                
< Key > false </ Key >
                
< Identity > false </ Identity >
                
< DataType > string </ DataType >
                
< DbType > NvarChar </ DbType >
                
< Length > 10 </ Length >
                
< isNull > false </ isNull >
                
< DefualtValue > "" </ DefualtValue >
                
< ColumnDescription > </ ColumnDescription >
            
</ FieldName >
            
        
</ DataField >
    
</ Table >
</ Root >

 

这个是我的格式的xml文件,当你可以生成一个自己想要个别的xml文件,比如通过一个sql语句来查询数据库把,表结构,和字段信息,查出来,然后生成一个这样子的xml文件就可以

最重要的是xlst文件.这个才是最重要的东西.这个xml就是数据文件.

下面我们要的就是模板文件了.其实这个模板文件就是一个xslt的文件.用他来格式化xml,让以一定风格来输出这个xml

我们先用上面的xml文件来生成对表的添加,删除,修改,获取实体的sql语句操作

 

<? xml version="1.0" encoding="utf-8" ?>
< xsl:stylesheet  version ="1.0"  xmlns:xsl ="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl
="urn:schemas-microsoft-com:xslt"  exclude-result-prefixes ="msxsl"
>
    
< xsl:output  method ="xml"  indent ="yes" />

    
< xsl:template  match ="/" >
create proc 
< xsl:value-of  select ="Root/Table/TableName" /> _Add
--
< xsl:value-of  select ="Root/Table/DateTime" /> --
        
< xsl:call-template  name ="DefinitionAddParameters" />
as

    insert into 
< xsl:value-of  select ="Root/Table/TableName" />  
                ( 
< xsl:call-template  name ="GetAddField" /> )
                values
                ( 
< xsl:call-template  name ="GetAddParameters" />
                
                
< xsl:call-template  name ="IdentityOutput" />
                
go             
                
create proc 
< xsl:value-of  select ="Root/Table/TableName" /> _Update
--
< xsl:value-of  select ="Root/Table/DateTime" /> --
        
< xsl:call-template  name ="DefinitionUpdateParameters" />
as

    update 
< xsl:value-of  select ="Root/Table/TableName" />  set 
                
< xsl:call-template  name ="GetUpdateField" />
                
< xsl:call-template  name ="GetUpdateWhere" />
                
                
go

create proc 
< xsl:value-of  select ="Root/Table/TableName" /> _Delete
--
< xsl:value-of  select ="Root/Table/DateTime" /> --
< xsl:call-template  name ="DefinitionDeleteParameters" />
as
    
    delete from 
< xsl:value-of  select ="Root/Table/TableName" />
                
< xsl:call-template  name ="GetDeleteWhere" />
                
                
go

create proc 
< xsl:value-of  select ="Root/Table/TableName" /> _GetModel
--
< xsl:value-of  select ="Root/Table/DateTime" /> --
< xsl:call-template  name ="DefinitionDeleteParameters" />
as

    select  
< xsl:call-template  name ="GetAddField" />
                from 
< xsl:value-of  select ="Root/Table/TableName" />< xsl:text  >   </ xsl:text >< xsl:call-template  name ="GetModelWhere" />
    
</ xsl:template >
    
< xsl:template  name ="IdentityOutput" >
     
< xsl:for-each  select ="Root/Table/PrimaryKey/FieldName" >
    
< xsl:if  test ="position()!=last()" >
                set @
< xsl:value-of  select ="Field" />  = scope_identity()
    
</ xsl:if >
    
< xsl:if  test ="position()=last()" >
                set @
< xsl:value-of  select ="Field" />  = scope_identity()
    
</ xsl:if >
    
</ xsl:for-each >
</ xsl:template >
<!-- 定义参数 -->
< xsl:template  name ="DefinitionAddParameters" >
    
< xsl:for-each  select ="Root/Table/DataField/FieldName" >
        
< xsl:if  test ="Key='true'" >
        
< xsl:if  test ="position()!=last()" >
@
< xsl:value-of  select ="Field" />< xsl:text  >   </ xsl:text >< xsl:value-of  select ="DbType" />< xsl:if  test ="Length!=''" > ( < xsl:value-of  select ="Length"   /> ) </ xsl:if >  output,  < xsl:if  test ="ColumnDescription!=''" > -- < xsl:value-of  select ="ColumnDescription" /></ xsl:if >
        
</ xsl:if >
                
< xsl:if  test ="position()=last()" >
@
< xsl:value-of  select ="Field" />< xsl:text  >   </ xsl:text >< xsl:value-of  select ="DbType" />< xsl:if  test ="Length!=''" > ( < xsl:value-of  select ="Length"   /> ) </ xsl:if >  output  < xsl:if  test ="ColumnDescription!=''" > -- < xsl:value-of  select ="ColumnDescription" /></ xsl:if >
        
</ xsl:if >
        
</ xsl:if >
        
< xsl:if  test ="Key='false'" >
        
< xsl:if  test ="position()!=last()" >
@
< xsl:value-of  select ="Field" />< xsl:text  >   </ xsl:text >< xsl:value-of  select ="DbType" />   < xsl:if  test ="Length!=''" > ( < xsl:value-of  select ="Length"   /> ) </ xsl:if > , < xsl:if  test ="ColumnDescription!=''" >< xsl:text  >   </ xsl:text > -- < xsl:value-of  select ="ColumnDescription" /></ xsl:if >
        
</ xsl:if >
                
< xsl:if  test ="position()=last()" >
@
< xsl:value-of  select ="Field" />< xsl:text  >   </ xsl:text >< xsl:value-of  select ="DbType" />   < xsl:if  test ="Length!=''" > ( < xsl:value-of  select ="Length"   /> ) </ xsl:if >   < xsl:if  test ="ColumnDescription!=''" >< xsl:text  >   </ xsl:text > -- < xsl:value-of  select ="ColumnDescription" /></ xsl:if >
        
</ xsl:if >
        
</ xsl:if >
    
</ xsl:for-each >
</ xsl:template >
<!-- 生成AddSQL -->
< xsl:template  name ="GetAddField" >
    
< xsl:for-each  select ="Root/Table/DataField/FieldName" >
            
< xsl:if  test ="position() mod 8 != 0" >
                
< xsl:if  test ="position()!=last()" >
                
< xsl:value-of  select ="Field" />< xsl:text  >   </ xsl:text > </ xsl:if >
                
< xsl:if  test ="position()=last()" >
                
< xsl:value-of  select ="Field" />
                
< xsl:text  >   </ xsl:text >
                
</ xsl:if >
            
</ xsl:if >
            
< xsl:if  test ="position() mod 8 = 0" >
                
< xsl:if  test ="position()!=last()" >
                    
< xsl:value-of  select ="Field" />
                    
< xsl:text  >   </ xsl:text >  ,
                
</ xsl:if >
                
< xsl:if  test ="position()=last()" >
                    
< xsl:value-of  select ="Field" />
                    
< xsl:text  >   </ xsl:text >
                
</ xsl:if >
            
</ xsl:if >
    
</ xsl:for-each >
</ xsl:template >
<!-- 生成AddSQL -->
< xsl:template  name ="GetAddParameters" >
    
< xsl:for-each  select ="Root/Table/DataField/FieldName" >
        
< xsl:if  test ="Identity!='true'" >
            
< xsl:if  test ="position() mod 8 != 0" >
                
< xsl:if  test ="position()!=last()" > @ < xsl:value-of  select ="Field" />< xsl:text  >   </ xsl:text > </ xsl:if >
                
< xsl:if  test ="position()=last()" > @ < xsl:value-of  select ="Field" />
                
< xsl:text  >   </ xsl:text > )
                
</ xsl:if >
            
</ xsl:if >
            
< xsl:if  test ="position() mod 8 = 0" >
                
< xsl:if  test ="position()!=last()" > @ < xsl:value-of  select ="Field" />
                    
< xsl:text  >   </ xsl:text > ,
                
</ xsl:if >
                
< xsl:if  test ="position()=last()" > @ < xsl:value-of  select ="Field" />
                    
< xsl:text  >   </ xsl:text > )
                
</ xsl:if >
            
</ xsl:if >
        
</ xsl:if >
    
</ xsl:for-each >
</ xsl:template >
<!-- 定义Update参数 -->
< xsl:template  name ="DefinitionUpdateParameters" >
    
< xsl:for-each  select ="Root/Table/DataField/FieldName" >
        
< xsl:if  test ="Key='true'" >
            
< xsl:if  test ="position()!=last()" >
@
< xsl:value-of  select ="Field" />< xsl:text  >   </ xsl:text >< xsl:value-of  select ="DbType" />< xsl:if  test ="Length!=''" > ( < xsl:value-of  select ="Length"   /> ) </ xsl:if >  output,  < xsl:if  test ="ColumnDescription!=''" > -- < xsl:value-of  select ="ColumnDescription" /></ xsl:if >
            
</ xsl:if >
            
< xsl:if  test ="position()=last()" >
@
< xsl:value-of  select ="Field" />< xsl:text  >   </ xsl:text >< xsl:value-of  select ="DbType" />< xsl:if  test ="Length!=''" > ( < xsl:value-of  select ="Length"   /> ) </ xsl:if >  output  < xsl:if  test ="ColumnDescription!=''" > -- < xsl:value-of  select ="ColumnDescription" /></ xsl:if >
            
</ xsl:if >
        
</ xsl:if >
        
< xsl:if  test ="Key='false'" >
            
< xsl:if  test ="position()!=last()" >
@
< xsl:value-of  select ="Field" />< xsl:text  >   </ xsl:text >< xsl:value-of  select ="DbType" />   < xsl:if  test ="Length!=''" > ( < xsl:value-of  select ="Length"   /> ) </ xsl:if > , < xsl:if  test ="ColumnDescription!=''" >< xsl:text  >   </ xsl:text > -- < xsl:value-of  select ="ColumnDescription" /></ xsl:if >
            
</ xsl:if >
            
< xsl:if  test ="position()=last()" >
@
< xsl:value-of  select ="Field" />< xsl:text  >   </ xsl:text >< xsl:value-of  select ="DbType" />   < xsl:if  test ="Length!=''" > ( < xsl:value-of  select ="Length"   /> ) </ xsl:if >   < xsl:if  test ="ColumnDescription!=''" >< xsl:text  >   </ xsl:text > -- < xsl:value-of  select ="ColumnDescription" /></ xsl:if >
            
</ xsl:if >
        
</ xsl:if >
    
</ xsl:for-each >
</ xsl:template >
<!-- 生成UpdateSQL -->
< xsl:template  name ="GetUpdateField" >
    
< xsl:for-each  select ="Root/Table/DataField/FieldName" >
        
< xsl:if  test ="Identity!='true'" >
            
< xsl:if  test ="position() mod 4 != 0" >
                
< xsl:if  test ="position()!=last()" >
                
< xsl:value-of  select ="Field" />  = @ < xsl:value-of  select ="Field" />  ,  </ xsl:if >
                
< xsl:if  test ="position()=last()" >
                
< xsl:value-of  select ="Field" />  = @ < xsl:value-of  select ="Field" />
                
< xsl:text  >   </ xsl:text >
                
</ xsl:if >
            
</ xsl:if >
            
< xsl:if  test ="position() mod 4 = 0" >
                
< xsl:if  test ="position()!=last()" >
                    
< xsl:value-of  select ="Field" />  = @ < xsl:value-of  select ="Field" />
                    
< xsl:text  >   </ xsl:text >  ,
                
</ xsl:if >
                
< xsl:if  test ="position()=last()" >
                    
< xsl:value-of  select ="Field" />  = @ < xsl:value-of  select ="Field" />
                    
< xsl:text  >   </ xsl:text >
                
</ xsl:if >
            
</ xsl:if >
        
</ xsl:if >
    
</ xsl:for-each >
</ xsl:template >
<!-- 生成Update条件 -->
< xsl:template  name ="GetUpdateWhere" >
                where 
< xsl:for-each  select ="Root/Table/PrimaryKey/FieldName" >
                
< xsl:if  test ="position()!=last()" >< xsl:value-of  select ="Field" />  = @ < xsl:value-of  select ="Field" />  ,  </ xsl:if >
                
< xsl:if  test ="position()=last()" >
                    
< xsl:value-of  select ="Field" />  = @ < xsl:value-of  select ="Field" />
                
</ xsl:if >
    
</ xsl:for-each >
</ xsl:template >
<!-- 生成Update条件 -->
< xsl:template  name ="DefinitionDeleteParameters" >
    
< xsl:for-each  select ="Root/Table/PrimaryKey/FieldName" >
            
< xsl:if  test ="position()!=last()" >
@
< xsl:value-of  select ="Field" />< xsl:text  >   </ xsl:text >< xsl:value-of  select ="DbType" />< xsl:if  test ="Length!=''" > ( < xsl:value-of  select ="Length"   /> ) </ xsl:if > < xsl:if  test ="ColumnDescription!=''" > -- < xsl:value-of  select ="ColumnDescription" /></ xsl:if >
            
</ xsl:if >
            
< xsl:if  test ="position()=last()" >
@
< xsl:value-of  select ="Field" />< xsl:text  >   </ xsl:text >< xsl:value-of  select ="DbType" />< xsl:if  test ="Length!=''" > ( < xsl:value-of  select ="Length"   /> ) </ xsl:if >   < xsl:if  test ="ColumnDescription!=''" >< xsl:text  >   </ xsl:text > -- < xsl:value-of  select ="ColumnDescription" /></ xsl:if >
        
</ xsl:if >
    
</ xsl:for-each >
</ xsl:template >
<!-- 生成Delete条件 -->
< xsl:template  name ="GetDeleteWhere" >
                where 
< xsl:for-each  select ="Root/Table/PrimaryKey/FieldName" >
                
< xsl:if  test ="position()!=last()" >< xsl:value-of  select ="Field" />  = @ < xsl:value-of  select ="Field" />  ,  </ xsl:if >
                
< xsl:if  test ="position()=last()" >
                    
< xsl:value-of  select ="Field" />  = @ < xsl:value-of  select ="Field" />
                
</ xsl:if >
    
</ xsl:for-each >
</ xsl:template >
<!-- 生成getmodel条件 -->
< xsl:template  name ="GetModelWhere" > where  < xsl:for-each  select ="Root/Table/PrimaryKey/FieldName" >
                
< xsl:if  test ="position()!=last()" >< xsl:value-of  select ="Field" />  = @ < xsl:value-of  select ="Field" />  ,  </ xsl:if >
                
< xsl:if  test ="position()=last()" >
                    
< xsl:value-of  select ="Field" />  = @ < xsl:value-of  select ="Field" />
                
</ xsl:if >
    
</ xsl:for-each >
</ xsl:template >
</ xsl:stylesheet >

 

这个就是一个xslt文件,注意他也有自己的语法,不过超级简单,大家可以学习下,真的太简单了.

http://www.w3school.com.cn/xml/xml_xsl.asp 大家可以去这里学习一下xslt语法.这个真是个好东西,如果你看了.我这片文章,你还不知道有xslt这个东西,那真的我只能说你真是太让人失望了,呵呵...

xslt的语法不是我要重要介绍的.我要介绍的是代码生成器,当然如果你需要生成不同的代码,只需要需该我上面生成的xslt文件就可以做到.

xslt格式化xml有很多种方法,比如js,或者.net,都可以很简单的来实现.下面我用vs2008来生成这个代码来看看

用vs2008打开这2个文件,或者直接拖到vs2008 里面编辑

 

选择vs的工具条中的 显示xlst输出 ,然后选择这个xml文件,就会输出你要的存储过程了.

 

< ?xml version = " 1.0 " encoding = "utf - 8 "? >
create   proc  TableName_Add
-- DateTime--
        
@EmployeeID   Int ( 4 ) output,  -- 员工ID
@LastName   NvarChar ( 20 ),  -- 名称ID
@FirstName   NvarChar ( 10 ),  --
@BirthDate   DateTime -- 生日
@Sex   NvarChar ( 1 ),  -- 性别
@Address   NvarChar ( 200 ),  -- 地址
@Company   NvarChar ( 100 ),  -- 公司
@Age   int ( 4 ),  -- 年龄
@Phone   NvarChar ( 30 ),  -- 电话
@Mobile   NvarChar ( 20 ),  -- 手机
@UserId   Int ( 10 ),
@FirstName   NvarChar ( 10 ),  --
@FirstName   NvarChar ( 10 ),  --
@FirstName   NvarChar ( 10 --
as

    
insert   into  TableName 
                ( EmployeeID , LastName , FirstName , BirthDate , Sex , Address , Company , Age  ,
                Phone , Mobile , UserId , FirstName , FirstName , FirstName )
                
values
                ( 
@LastName  ,  @FirstName  ,  @BirthDate  ,  @Sex  ,  @Address  ,  @Company  ,  @Age  ,
                
@Phone  ,  @Mobile  ,  @UserId  ,  @FirstName  ,  @FirstName  ,  @FirstName  )
                
                
set   @Field   =   scope_identity ()
    
                
set   @Field1   =   scope_identity ()
    
                
go              
                
create   proc  TableName_Update
-- DateTime--
        
@EmployeeID   Int ( 4 ) output,  -- 员工ID
@LastName   NvarChar ( 20 ),  -- 名称ID
@FirstName   NvarChar ( 10 ),  --
@BirthDate   DateTime -- 生日
@Sex   NvarChar ( 1 ),  -- 性别
@Address   NvarChar ( 200 ),  -- 地址
@Company   NvarChar ( 100 ),  -- 公司
@Age   int ( 4 ),  -- 年龄
@Phone   NvarChar ( 30 ),  -- 电话
@Mobile   NvarChar ( 20 ),  -- 手机
@UserId   Int ( 10 ),
@FirstName   NvarChar ( 10 ),  --
@FirstName   NvarChar ( 10 ),  --
@FirstName   NvarChar ( 10 --
as

    
update  TableName  set  
                LastName 
=   @LastName  , FirstName  =   @FirstName  , BirthDate  =   @BirthDate   ,
                Sex 
=   @Sex  , Address  =   @Address  , Company  =   @Company  , Age  =   @Age   ,
                Phone 
=   @Phone  , Mobile  =   @Mobile  , UserId  =   @UserId  , FirstName  =   @FirstName   ,
                FirstName 
=   @FirstName  , FirstName  =   @FirstName  
                
where  Field  =   @Field  , Field1  =   @Field1
                
                
go

create   proc  TableName_Delete
-- DateTime--

@Field   Int ( 4 ),  -- 员工ID
@Field1   Int ( 4 -- 员工ID
as
    
    
delete   from  TableName
                
where  Field  =   @Field  , Field1  =   @Field1
                
                
go

create   proc  TableName_GetModel
-- DateTime--

@Field   Int ( 4 ),  -- 员工ID
@Field1   Int ( 4 -- 员工ID
as

    
select   EmployeeID , LastName , FirstName , BirthDate , Sex , Address , Company , Age  ,
                Phone , Mobile , UserId , FirstName , FirstName , FirstName 
                
from  TableName  where  Field  =   @Field  , Field1  =   @Field1

 

xslt相当灵活,可以说你要什么效果都可以实现,只要你写一个xslt文件这么简单,也就是我们说的模板文件

我们再生成一下dal的代码

当然要一个dal.xslt的文件

 

<? xml version="1.0" encoding="utf-8" ?>
< xsl:stylesheet  version ="1.0"  xmlns:xsl ="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl
="urn:schemas-microsoft-com:xslt"  exclude-result-prefixes ="msxsl"
 xmlns:user
="UserCode" >
    
< xsl:output  method ="xml"  indent ="yes" />
    
< xsl:template  match ="/" >
///
< xsl:value-of  select ="Root/Table/DateTime" />
using System;
using System.Data;
using System.Data.SqlClient;
< xsl:choose >< xsl:when  test ="Root/Table/NameSpace!=''" > using  < xsl:value-of  select ="Root/Table/NameSpace" /> .Model; </ xsl:when >< xsl:otherwise > using Model;
            
</ xsl:otherwise >
        
</ xsl:choose >
        
< xsl:call-template  name ="GetNameSpace" />
    public class 
< xsl:value-of  select ="Root/Table/ClassName" />
    {
        ///
< xsl:text  disable-output-escaping ="yes"   > &lt; summary &gt; </ xsl:text >
        /// 添加
        ///
< xsl:text   disable-output-escaping ="yes" > &lt; /summary &gt; </ xsl:text >
        public bool Add(
< xsl:call-template  name ="GetName" />  model)
        {
            SqlParameter[] parameters ={
< xsl:call-template  name ="GetField" />
            
< xsl:text  > </ xsl:text >

        
< xsl:text  >      </ xsl:text >< xsl:call-template  name ="Add-SetField" />
            if(SQLHelper.RunQuery("
< xsl:value-of  select ="Root/Table/ClassName" /> _Add", parameters))
            {
< xsl:call-template  name ="Add-SetReturn" />
                return true;
            }
            else
            {
                return false;
            }
                
        }

        ///
< xsl:text  disable-output-escaping ="yes"   > &lt; summary &gt; </ xsl:text >
        /// 更新记录
        ///
< xsl:text   disable-output-escaping ="yes" > &lt; /summary &gt; </ xsl:text >
        public bool Update(
< xsl:call-template  name ="GetName" />  model)
        {
            SqlParameter[] parameters ={
< xsl:call-template  name ="GetField" />
            
< xsl:text  > </ xsl:text >
        
< xsl:text  >          </ xsl:text >< xsl:call-template  name ="Update-SetField" />
            if(SQLHelper.RunQuery("
< xsl:value-of  select ="Root/Table/ClassName" /> _Update", parameters))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        
        ///
< xsl:text  disable-output-escaping ="yes"   > &lt; summary &gt; </ xsl:text >
        /// 删除
        ///
< xsl:text   disable-output-escaping ="yes" > &lt; /summary &gt; </ xsl:text >
        public bool Delete(
< xsl:call-template  name ="GetKeyField" /> )
        {
            SqlParameter[] parameters ={
< xsl:call-template  name ="Delete-GetField" />

            
< xsl:call-template  name ="Delete-SetField" />
            
            if(SQLHelper.RunQuery("
< xsl:value-of  select ="Root/Table/ClassName" /> _Delete", parameters))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        ///
< xsl:text  disable-output-escaping ="yes"   > &lt; summary &gt; </ xsl:text >
        /// 获取实体
        ///
< xsl:text   disable-output-escaping ="yes" > &lt; /summary &gt; </ xsl:text >
        public 
< xsl:call-template  name ="GetName" />  GetModel( < xsl:call-template  name ="GetKeyField" /> )
        {
            SqlParameter[] parameters ={
< xsl:call-template  name ="Delete-GetField" />

            
< xsl:call-template  name ="Delete-SetField" />
            
< xsl:text  > </ xsl:text >   < xsl:text  > </ xsl:text >
        
< xsl:text  >              </ xsl:text >< xsl:call-template  name ="GetName" />   model= new  < xsl:call-template  name ="GetName" /> ();
            DataTable dt = SQLHelper.QueryTable("
< xsl:value-of  select ="Root/Table/ClassName" /> _GetModel", parameters);
            if (dt.Rows.Count 
< xsl:text  disable-output-escaping ="yes"   > &gt; </ xsl:text >  0)
            {
< xsl:call-template  name ="GetModel" />
            }
            else
            {
                model = null;
            }
                
            dt.Clear();
            dt.Dispose();
            return model;
        }

    }
}
    
</ xsl:template >

    
<!-- 获取类 -->
< xsl:template  name ="GetName" >
    
< xsl:choose >
        
< xsl:when  test ="Root/Table/NameSpace!=''" >< xsl:value-of  select ="Root/Table/NameSpace" /> .Model. < xsl:value-of  select ="Root/Table/ClassName" /></ xsl:when >
        
< xsl:otherwise > Model. < xsl:value-of  select ="Root/Table/ClassName" />
        
</ xsl:otherwise >
    
</ xsl:choose >
</ xsl:template >
    
<!-- 获取名称空间 -->
< xsl:template  name ="GetNameSpace" >
        
< xsl:choose >
            
< xsl:when  test ="Root/Table/NameSpace!=''" >
namespace 
< xsl:value-of  select ="Root/Table/NameSpace" /> .DAL
{
            
</ xsl:when >
            
< xsl:otherwise >
namespace DAL
{
            
</ xsl:otherwise >
        
</ xsl:choose >
</ xsl:template >
    
<!-- 获取主键 -->
< xsl:template  name ="GetKeyField" >
    
< xsl:for-each  select ="Root/Table/PrimaryKey/FieldName" >
        
< xsl:value-of  select ="DataType" />
        
< xsl:text  >   </ xsl:text >
        
< xsl:if  test ="position()!=last()" >
            
< xsl:value-of  select ="Field" /> , < xsl:text  >   </ xsl:text >
    
</ xsl:if >
        
< xsl:if  test ="position()=last()" >
            
< xsl:value-of  select ="Field" />
        
</ xsl:if >
    
</ xsl:for-each >
</ xsl:template >
    
<!-- 获取字段声明 -->
< xsl:template  name ="GetField" >
        
< xsl:for-each  select ="Root/Table/DataField/FieldName" >
< xsl:if  test ="position()!=last()" >
                new SqlParameter("@
< xsl:value-of  select ="Field" /> ",SqlDbType. < xsl:value-of  select ="DbType" />< xsl:if  test ="Length!=''" > , < xsl:value-of  select ="Length" /></ xsl:if > ), </ xsl:if >
< xsl:if  test ="position()=last()" >
                new SqlParameter("@
< xsl:value-of  select ="Field" /> ",SqlDbType. < xsl:value-of  select ="DbType" />< xsl:if  test ="Length!=''" > , < xsl:value-of  select ="Length" />
                
</ xsl:if > )}; </ xsl:if >
</ xsl:for-each >
    
</ xsl:template >
    
<!-- (添加)字段赋值 -->
< xsl:template  name ="Add-SetField" >
< xsl:for-each  select ="Root/Table/DataField/FieldName" >
    
< xsl:if  test ="Key='true'" >
        
< xsl:text  >          </ xsl:text > parameters[ < xsl:value-of    select ="position()-1" /> ].Value = ParameterDirection.Output;
    
</ xsl:if >
    
< xsl:if  test ="Key='false'" >
    
< xsl:text  >          </ xsl:text > parameters[ < xsl:value-of    select ="position()-1" /> ].Value = model. < xsl:value-of  select ="Field" /> ;
    
</ xsl:if >
    
</ xsl:for-each >
</ xsl:template >
    
<!-- (更新)字段赋值 -->
    
< xsl:template  name ="Update-SetField" >
        
< xsl:for-each  select ="Root/Table/DataField/FieldName" >
            
< xsl:text  >      </ xsl:text > parameters[ < xsl:value-of    select ="position()-1" /> ].Value = model. < xsl:value-of  select ="Field" /> ;
        
</ xsl:for-each >
    
</ xsl:template >
    
<!-- (添加)设置返回值 -->
< xsl:template  name ="Add-SetReturn" >
    
< xsl:for-each  select ="Root/Table/PrimaryKey/FieldName" >
                model.
< xsl:value-of  select ="Field" />  = ( < xsl:value-of  select ="DataType" /> )parameters[ < xsl:value-of    select ="position()-1" /> ].Value; </ xsl:for-each >
</ xsl:template >
<!-- (删除)获取字段声明 -->
< xsl:template  name ="Delete-GetField" >
    
< xsl:for-each  select ="Root/Table/PrimaryKey/FieldName" >
        
< xsl:if  test ="position()!=last()" >
                new SqlParameter("@
< xsl:value-of  select ="Field" /> ",SqlDbType. < xsl:value-of  select ="DbType" />< xsl:if  test ="Length!=''" > , < xsl:value-of  select ="Length" />
                
</ xsl:if > ), </ xsl:if >
        
< xsl:if  test ="position()=last()" >
                new SqlParameter("@
< xsl:value-of  select ="Field" /> ",SqlDbType. < xsl:value-of  select ="DbType" />< xsl:if  test ="Length!=''" > , < xsl:value-of  select ="Length" />
                
</ xsl:if > )};
        
</ xsl:if >
    
</ xsl:for-each >
</ xsl:template >
    
<!-- (删除)字段赋值 -->
< xsl:template  name ="Delete-SetField" >
    
< xsl:for-each  select ="Root/Table/PrimaryKey/FieldName" >
            parameters[
< xsl:value-of    select ="position()-1" /> ].Value =  < xsl:value-of  select ="Field" /> ; </ xsl:for-each >
</ xsl:template >
<!-- 返回实体 -->
< xsl:template  name ="GetModel" >
    
< xsl:for-each  select ="Root/Table/DataField/FieldName" >
        
< xsl:if  test ="DataType='string'" >
                model.
< xsl:value-of  select ="Field" />  = dt.Rows[0][" < xsl:value-of  select ="Field" /> "].ToString(); </ xsl:if >
        
< xsl:if  test ="DataType!='string'" >
                if (dt.Rows[0]["
< xsl:value-of  select ="Field" /> "].ToString() != "")
                {
                    model.
< xsl:value-of  select ="Field" />  = int.Parse(dt.Rows[0][" < xsl:value-of  select ="Field" /> "].ToString());
                }
</ xsl:if >
    
</ xsl:for-each >
</ xsl:template >
</ xsl:stylesheet >

 

重复上面同样的工作就可以生成出dal的代码了..

选择一个xml文件,我们还是选择上面的xml.然后输出的结果如下

 

<? xml version = " 1.0 "  encoding = " utf-8 " ?>
/// DateTime
using  System;
using  System.Data;
using  System.Data.SqlClient;
using  NameSpace.Model;
namespace  NameSpace.DAL
{
            
    
public   class  ClassName
    {
        
/// <summary>
        
///  添加
        
/// </summary>
         public   bool  Add(NameSpace.Model.ClassName model)
        {
            SqlParameter[] parameters 
= {
                
new  SqlParameter( " @EmployeeID " ,SqlDbType.Int, 4 ),
                
new  SqlParameter( " @LastName " ,SqlDbType.NvarChar, 20 ),
                
new  SqlParameter( " @FirstName " ,SqlDbType.NvarChar, 10 ),
                
new  SqlParameter( " @BirthDate " ,SqlDbType.DateTime),
                
new  SqlParameter( " @Sex " ,SqlDbType.NvarChar, 1 ),
                
new  SqlParameter( " @Address " ,SqlDbType.NvarChar, 200 ),
                
new  SqlParameter( " @Company " ,SqlDbType.NvarChar, 100 ),
                
new  SqlParameter( " @Age " ,SqlDbType. int , 4 ),
                
new  SqlParameter( " @Phone " ,SqlDbType.NvarChar, 30 ),
                
new  SqlParameter( " @Mobile " ,SqlDbType.NvarChar, 20 ),
                
new  SqlParameter( " @UserId " ,SqlDbType.Int, 10 ),
                
new  SqlParameter( " @FirstName " ,SqlDbType.NvarChar, 10 ),
                
new  SqlParameter( " @FirstName " ,SqlDbType.NvarChar, 10 ),
                
new  SqlParameter( " @FirstName " ,SqlDbType.NvarChar, 10 )};

            parameters[
0 ].Value  =  ParameterDirection.Output;
            parameters[
1 ].Value  =  model.LastName;
            parameters[
2 ].Value  =  model.FirstName;
            parameters[
3 ].Value  =  model.BirthDate;
            parameters[
4 ].Value  =  model.Sex;
            parameters[
5 ].Value  =  model.Address;
            parameters[
6 ].Value  =  model.Company;
            parameters[
7 ].Value  =  model.Age;
            parameters[
8 ].Value  =  model.Phone;
            parameters[
9 ].Value  =  model.Mobile;
            parameters[
10 ].Value  =  model.UserId;
            parameters[
11 ].Value  =  model.FirstName;
            parameters[
12 ].Value  =  model.FirstName;
            parameters[
13 ].Value  =  model.FirstName;
    
            
if (SQLHelper.RunQuery( " ClassName_Add " , parameters))
            {
                model.Field 
=  ( int )parameters[ 0 ].Value;
                model.Field1 
=  ( int )parameters[ 1 ].Value;
                
return   true ;
            }
            
else
            {
                
return   false ;
            }
                
        }

        
/// <summary>
        
///  更新记录
        
/// </summary>
         public   bool  Update(NameSpace.Model.ClassName model)
        {
            SqlParameter[] parameters 
= {
                
new  SqlParameter( " @EmployeeID " ,SqlDbType.Int, 4 ),
                
new  SqlParameter( " @LastName " ,SqlDbType.NvarChar, 20 ),
                
new  SqlParameter( " @FirstName " ,SqlDbType.NvarChar, 10 ),
                
new  SqlParameter( " @BirthDate " ,SqlDbType.DateTime),
                
new  SqlParameter( " @Sex " ,SqlDbType.NvarChar, 1 ),
                
new  SqlParameter( " @Address " ,SqlDbType.NvarChar, 200 ),
                
new  SqlParameter( " @Company " ,SqlDbType.NvarChar, 100 ),
                
new  SqlParameter( " @Age " ,SqlDbType. int , 4 ),
                
new  SqlParameter( " @Phone " ,SqlDbType.NvarChar, 30 ),
                
new  SqlParameter( " @Mobile " ,SqlDbType.NvarChar, 20 ),
                
new  SqlParameter( " @UserId " ,SqlDbType.Int, 10 ),
                
new  SqlParameter( " @FirstName " ,SqlDbType.NvarChar, 10 ),
                
new  SqlParameter( " @FirstName " ,SqlDbType.NvarChar, 10 ),
                
new  SqlParameter( " @FirstName " ,SqlDbType.NvarChar, 10 )};

            parameters[
0 ].Value  =  model.EmployeeID;
            parameters[
1 ].Value  =  model.LastName;
            parameters[
2 ].Value  =  model.FirstName;
            parameters[
3 ].Value  =  model.BirthDate;
            parameters[
4 ].Value  =  model.Sex;
            parameters[
5 ].Value  =  model.Address;
            parameters[
6 ].Value  =  model.Company;
            parameters[
7 ].Value  =  model.Age;
            parameters[
8 ].Value  =  model.Phone;
            parameters[
9 ].Value  =  model.Mobile;
            parameters[
10 ].Value  =  model.UserId;
            parameters[
11 ].Value  =  model.FirstName;
            parameters[
12 ].Value  =  model.FirstName;
            parameters[
13 ].Value  =  model.FirstName;
        
            
if (SQLHelper.RunQuery( " ClassName_Update " , parameters))
            {
                
return   true ;
            }
            
else
            {
                
return   false ;
            }
        }
        
        
/// <summary>
        
///  删除
        
/// </summary>
         public   bool  Delete( int  Field,  int  Field1)
        {
            SqlParameter[] parameters 
= {
                
new  SqlParameter( " @Field " ,SqlDbType.Int, 4 ),
                
new  SqlParameter( " @Field1 " ,SqlDbType.Int, 4 )};
        
            parameters[
0 ].Value  =  Field;
            parameters[
1 ].Value  =  Field1;
            
            
if (SQLHelper.RunQuery( " ClassName_Delete " , parameters))
            {
                
return   true ;
            }
            
else
            {
                
return   false ;
            }
        }

        
/// <summary>
        
///  获取实体
        
/// </summary>
         public  NameSpace.Model.ClassName GetModel( int  Field,  int  Field1)
        {
            SqlParameter[] parameters 
= {
                
new  SqlParameter( " @Field " ,SqlDbType.Int, 4 ),
                
new  SqlParameter( " @Field1 " ,SqlDbType.Int, 4 )};
        
            parameters[
0 ].Value  =  Field;
            parameters[
1 ].Value  =  Field1;

            NameSpace.Model.ClassName  model
=   new  NameSpace.Model.ClassName();
            DataTable dt 
=  SQLHelper.QueryTable( " ClassName_GetModel " , parameters);
            
if  (dt.Rows.Count  >   0 )
            {
                
if  (dt.Rows[ 0 ][ " EmployeeID " ].ToString()  !=   "" )
                {
                    model.EmployeeID 
=   int .Parse(dt.Rows[ 0 ][ " EmployeeID " ].ToString());
                }
                model.LastName 
=  dt.Rows[ 0 ][ " LastName " ].ToString();
                model.FirstName 
=  dt.Rows[ 0 ][ " FirstName " ].ToString();
                
if  (dt.Rows[ 0 ][ " BirthDate " ].ToString()  !=   "" )
                {
                    model.BirthDate 
=   int .Parse(dt.Rows[ 0 ][ " BirthDate " ].ToString());
                }
                model.Sex 
=  dt.Rows[ 0 ][ " Sex " ].ToString();
                model.Address 
=  dt.Rows[ 0 ][ " Address " ].ToString();
                model.Company 
=  dt.Rows[ 0 ][ " Company " ].ToString();
                
if  (dt.Rows[ 0 ][ " Age " ].ToString()  !=   "" )
                {
                    model.Age 
=   int .Parse(dt.Rows[ 0 ][ " Age " ].ToString());
                }
                model.Phone 
=  dt.Rows[ 0 ][ " Phone " ].ToString();
                model.Mobile 
=  dt.Rows[ 0 ][ " Mobile " ].ToString();
                
if  (dt.Rows[ 0 ][ " UserId " ].ToString()  !=   "" )
                {
                    model.UserId 
=   int .Parse(dt.Rows[ 0 ][ " UserId " ].ToString());
                }
                model.FirstName 
=  dt.Rows[ 0 ][ " FirstName " ].ToString();
                model.FirstName 
=  dt.Rows[ 0 ][ " FirstName " ].ToString();
                model.FirstName 
=  dt.Rows[ 0 ][ " FirstName " ].ToString();
            }
            
else
            {
                model 
=   null ;
            }
                
            dt.Clear();
            dt.Dispose();
            
return  model;
        }

    }
}
    

 

怎么样,绝对不会比你见过的代码生成器弱,而这个使用是如此的简单,当然还可以生成bll,webui层的代码.不过都需要自己写一个xslt文件而已,大家用了这个肯定会有想法

不想只是这样麻烦的使用,如何把他封装一下,变成有界面的,真正的代码生成器.其实也简单 ,我下面写了一小demo,代码很简单,大家可以下载看看..

轮子就这样被我造出来了,如此简单!

不敢怠慢,奉上代码奉上/Files/mextb1860/CodeFactory.rar

欢迎各位踊跃的仍鸡蛋,和指点错误!

转载于:https://www.cnblogs.com/yupipi520/archive/2008/12/01/1345224.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值