日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

自定义代码生成器

發布時間:2024/1/17 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自定义代码生成器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這里使用的是動軟的模板.

這是動軟代碼生成器的一個整體界面。

下面做的示例是從右邊模板管理中的選一個模板進行修改,這里我選了簡單三層模板中的DAL.cmt模板

?

<#@ template language="c#" HostSpecific="True" #><#@ output extension= ".cs" #><# TableHost host = (TableHost)(Host); string DbParaHead=host.DbParaHead; string DbParaDbType=host.DbParaDbType; string preParameter=host.preParameter; string ModelSpace = host.NameSpace+".Model."+ host.GetModelClass(host.TableName); ColumnInfo identityKey=host.IdentityKey; string returnValue = "void"; if (identityKey!=null) { returnValue = CodeCommon.DbTypeToCS(identityKey.TypeName); }#>

?

在模板上右鍵,編輯查看。就能看到上面的代碼,這是模板中自定義的一些變量。

?

using System; using System.Text;using System.Data.SqlClient;using System.Collections.Generic; using System.Data;using Maticsoft.DBUtility;namespace DAL <# if( host.Folder.Length > 0){ #> .<#= host.Folder #><# } #>{ <# if( host.TableDescription.Length > 0) {#> //<#= host.TableDescription #> <# } #> public partial class <#= host.GetDALClass(host.TableName) #>DAO {

?

上面的代碼也是模板中我們非常熟悉的引用,接下來我來說下我今天要修改的內容。UPDATE功能,動軟中的update功能是將一個實體傳進去,全部修改,這里我把它修改成,只修改實體中存在的值

?

/// <summary>/// this is a new update module/// </summary>public void Update(<#= ModelSpace #>Entity model) { StringBuilder strSql=new StringBuilder(); List<SqlParameter> parameters = new List<SqlParameter>(); }

?

先來定義兩個變量,因為和實際代碼中是一樣的,所以這里只有一點,就是<# = ModelSpace#>,這個變量已經在文件的開頭定義了,就是該模板的空間名+類名。

接下來我們需要寫一個for循環,來判斷哪些代碼要添加的sql語句中,哪些代碼不需要。

?

strSql.Append("update <#= host.TableName #> set ");<# for(int i=0;i< host.Fieldlist.Count;i++){ ColumnInfo c = host.Fieldlist[i]; #><# if (!c.IsIdentity) {#> if(!string.IsNullOrEmpty(model.<#=c.ColumnName#>)){ strSql.Append(" <#= c.ColumnName #> = <#=preParameter#><#=c.ColumnName#> <# if (i< host.Fieldlist.Count-1 ) {#>,<#}#> ");}<# }#><# }#>

?

這里的幾個變量解釋寫

<#= host.TableName #> 表名
host.Fieldlist.Count字段數
c.IsIdentity是否主鍵
<#=preParameter#>@符號
<#=c.ColumnName#>列名

.

最后加一個條件語句

strSql.Append(" where <#= CodeCommon.GetWhereParameterExpression(host.Keys, true ,host.DbType) #> ");

現在sql語句寫好了,當時發現沒有寫變量;添加變量比較簡單。只要在每個判空的條件語句后面添加就可以了

?

<# if (!c.IsIdentity) {#> if(!string.IsNullOrEmpty(model.<#=c.ColumnName#>)){ strSql.Append(" <#= c.ColumnName #> = <#=preParameter#><#=c.ColumnName#> , "); parameters.Add(new SqlParameter("<#=preParameter#><#=c.ColumnName#>",model.<#=c.ColumnName#>)); }<# }#><# }#>

?

添加之后,會發現所有實體的屬性都被用string.IsNullOrEmpty()來判斷,所以這里還要添加一個判斷屬性類型的條件

<# if (!c.IsIdentity) {#> <# if(CodeCommon.DbTypeToCS(c.TypeName)=="string") {#>if(!string.IsNullOrEmpty(model.<#=c.ColumnName#>)){ strSql.Append(" <#= c.ColumnName #> = <#=preParameter#><#=c.ColumnName#> , "); parameters.Add(new SqlParameter("<#=preParameter#><#=c.ColumnName#>",model.<#=c.ColumnName#>)); }<# }#><# if(CodeCommon.DbTypeToCS(c.TypeName)=="int"|| CodeCommon.DbTypeToCS(c.TypeName)=="long"|| CodeCommon.DbTypeToCS(c.TypeName)=="float"|| CodeCommon.DbTypeToCS(c.TypeName)=="DateTime"|| CodeCommon.DbTypeToCS(c.TypeName)=="decimal") {#>if(model.<#=c.ColumnName#>!=0){ strSql.Append(" <#= c.ColumnName #> = <#=preParameter#><#=c.ColumnName#> , "); parameters.Add(new SqlParameter("<#=preParameter#><#=c.ColumnName#>",model.<#=c.ColumnName#>)); } <#}#><#}#>

?

上面是個例子,具體情況具體分析。

最后整體的UPDATE代碼如下

/// <summary> /// this is a new update module l||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| /// </summary> public bool Update(<#= ModelSpace #>Entity model) { StringBuilder strSql=new StringBuilder(); List<SqlParameter> parameters = new List<SqlParameter>(); strSql.Append("update <#= host.TableName #> set "); <# for(int i=0;i< host.Fieldlist.Count;i++) { ColumnInfo c = host.Fieldlist[i]; #> <# if (!c.IsIdentity) {#> <# if(CodeCommon.DbTypeToCS(c.TypeName)=="string") {#> if(!string.IsNullOrEmpty(model.<#=c.ColumnName#>)){ strSql.Append(" <#= c.ColumnName #> = <#=preParameter#><#=c.ColumnName#> , "); parameters.Add(new SqlParameter("<#=preParameter#><#=c.ColumnName#>",model.<#=c.ColumnName#>)); }<# }#> <# if(CodeCommon.DbTypeToCS(c.TypeName)=="bool") {#> strSql.Append(" <#= c.ColumnName #> = <#=preParameter#><#=c.ColumnName#> , "); parameters.Add(new SqlParameter("<#=preParameter#><#=c.ColumnName#>",model.<#=c.ColumnName#>)); <# }#> <# if(CodeCommon.DbTypeToCS(c.TypeName)=="int"|| CodeCommon.DbTypeToCS(c.TypeName)=="long"|| CodeCommon.DbTypeToCS(c.TypeName)=="float"|| CodeCommon.DbTypeToCS(c.TypeName)=="DateTime"|| CodeCommon.DbTypeToCS(c.TypeName)=="decimal") {#> if(model.<#=c.ColumnName#>!=0){ strSql.Append(" <#= c.ColumnName #> = <#=preParameter#><#=c.ColumnName#> , "); parameters.Add(new SqlParameter("<#=preParameter#><#=c.ColumnName#>",model.<#=c.ColumnName#>)); } <#}#> <#}#> <# }#> strSql = strSql.Remove(strSql.Length - 2,2); strSql.Append(" where <#= CodeCommon.GetWhereParameterExpression(host.Keys, true ,host.DbType) #> "); <# for(int i=0;i< host.Keys.Count;i++) { ColumnInfo key = host.Keys[i]; #> <# if (key.IsPrimaryKey || !key.IsIdentity) {#> parameters.Add(new SqlParameter("<#=preParameter#><#=key.ColumnName#>",model.<#=key.ColumnName#>)); <#}#> <# }#> int rows=<#= host.DbHelperName#>.ExecuteSql(strSql.ToString(),parameters.ToArray()); if (rows > 0) { return true; } else { return false; } }

轉載于:https://www.cnblogs.com/TivonStone/archive/2012/02/28/2371256.html

總結

以上是生活随笔為你收集整理的自定义代码生成器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。