代码拉取完成,页面将自动刷新
MyPeach.Net是在.Net生态下的一个动态SQ转换工具,它能根据SQL中配置的键(默认格式:#键名#)和 键值集合(Map<String, Object>)来生成动态的SQL。
即某键如有值传入,那么会将该条件保留,并将其参数化或字符替换(可配置选择);否则将该条件抛弃或修改为 AND 1=1(一些用括号括起来的多个条件分析时)。
可动态的部分包括:所有类型的条件,INSERT项,UPDATE项。
INSER INTO ...VALUES...
INSERT INTO...SELECT...FROM...WHERE...
INSERT INTO...WITH...SELECT...FROM...WHERE...
WITH...INSERT INTO... SELECT...FROM...WHERE...
UPDATE ... SET...FROM...WHERE...
DELETE FROM...WHERE...
SEELCT...FROM...WHERE...GROUP BY...HAVING...ORDER BY...LIMIT...
WITH...AS (),WITH...AS () SELECT...FROM...WHERE...
SELECT...UNION ALL SELECT...
MERGE INTO...USING...WHEN (NOT) MATCH...
本项目是参考本人的另一个开源项目【MyPeach Dynamic SQL Parser Tool for Java】编写的,只是本项目是运行在微软的ASP.NET环境下。
具体处理思路:
3.1.1 去掉SQL前后空格。注:这里不要转换为大写,因为存在一些值是区分大小的,全部转换为大写会导致SQL条件错误!
3.1.2 将参数中的#{},转换为##,方便后续统一处理
3.2.1 先去掉--的单行注释
3.2.2 先去掉/***\/的多行注释:因为多行注释不好用正则匹配,所以其就要像左右括号一样,单独分析匹配。
内部有针对注释中动态SQl语句部分的处理。
3.2.3 复制SQL,并将参数中的#号替换为*,防止跟原注释冲突。
3.2.4 根据替换后的SQL分析,找到#开头的单行注释后移除
string sPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\Sql\";
string sSelect = File.ReadAllText(Path.Combine(sPath, "01_Select.txt"));
MyPeachNetProperties pop = new MyPeachNetProperties();
pop.TargetSqlParamTypeEnum = TargetSqlParamTypeEnum.DIRECT_RUN;
SqlParsers sqlParsers = new SqlParsers(pop);
IDictionary<String, Object> dicQuery = new Dictionary<String, Object>();
dicQuery["PROVINCE_ID"]= "张三";
dicQuery["PROVINCE_CODE"] ="BJ";
dicQuery["PROVINCE_NAME"] ="北京";
dicQuery["DATE"] = "20222-02-10";
dicQuery["NAME"] = 1;
dicQuery["REMARK"] = "测试";
dicQuery["BF"] = "back";
dicQuery["#TFLAG#"] = "tflagValue";
//dicQuery["MDLIST"] = new string[] { "SE", "PA", "FI" };//传入一个数组
//List<String> list = new List<String>();
//list.AddRange(new string[] { "SE", "PA", "FI" });
List<int> list = new List<int>();
list.AddRange(new int[] { 2, 3, 4 });
dicQuery["MDLIST"] = list;//传入一个数组
showMsg(sqlParsers.parse(SqlTypeEnum.SELECT, sSelect, dicQuery));
static void showMsg(ParserResult result)
{
if (result == null) return;
Console.WriteLine(result.Code.Equals("1") ? result.Message : result.Sql);
}
提交BUG需提供的内容:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。