一个完整的应用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;
        }
    }

 

posted @ 2022-07-18 13:11  GoldArch  阅读(113)  评论(0编辑  收藏  举报