一个完整的应用DotLiquid生成sql执行语句的脚本示例
对C#、msSql、vfp、软件系统架构、企业管理软件开发、上位机、wince等制造企业应用场景、企业管理和心理学非常感兴趣。近年专攻印刷业MES,为多家烟包印刷企业和上市公司提供过解决方案。欢迎朋友们交流。
QQ:444743315
QQ群:38774625 (验证码:goldarch)
抖音号:971113627
微信公众号:正念坊
网站:http://posn.net && http://bandpos.com
博客:https://www.cnblogs.com/goldarch/
我的开源:https://github.com/goldarch
我的微博:https://weibo.com/posnsoft
============
一个完整的应用DotLiquid生成sql执行语句的脚本示例
开源地址:https://github.com/goldarch/GoldArch.DotLiquidTest
一直没有找到在脚本内部遍历dataTable.rows 的dotLiquid的示例,仔细看了示例代码,实现起来其实非常简单。
DotLiquid常用的方法在这一个例子中基本都用到了
下面是遍历dataTable的方法
public static class DataRowDropHelper { /// <summary> /// 关键,把dataTable转化为DataRowDrop List /// </summary> /// <param name="dt"></param> /// <returns></returns> public static List<DataRowDrop> GetDataRowDropList(DataTable dt) { //private readonly System.Data.DataTable _dataTable; List<DataRowDrop> list = new List<DataRowDrop>(); foreach (DataRow dr in dt.Rows) { list.Add(new DataRowDrop(dr)); } return list; } public static string ToSqlWithDataTableTemplate(string templateString,DataTable dt) { var template = Template.Parse(templateString); var list = GetDataRowDropList(dt); var str = template.Render(Hash.FromAnonymousObject(new { tb = list })); return str; } } public class DataRowDrop : Drop { private readonly System.Data.DataRow _dataRow; public DataRowDrop(System.Data.DataRow dataRow) { _dataRow = dataRow; } public override object BeforeMethod(string method) { if (_dataRow.Table.Columns.Contains(method)) { //dx,这里做了进一步整理 //return SqlHelperForSqlString.FormatSqlValue(_dataRow[method]); //在处理这样的语句时,遇到问题:SET @notePre='2022.07.08 V01 NO:{{ row.序号 | left_pad_zero:10}}' //这里的row.序号带''号后,后续处理会出问题!附加上的引号,也不符合一般习惯,把加引号的部分做成过滤器 return _dataRow[method]; } return null; } }