博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL动态配置,动态解析SQL
阅读量:5104 次
发布时间:2019-06-13

本文共 3820 字,大约阅读时间需要 12 分钟。

在项目中使用SQL动态配置的方式可以让后期的维护和发布后的修改变得更加方便,无论使用那种配置方式都离不开解析成最终真正能执行的SQL。

下面代码就是一种比较简单的处理方法,SQL的参数以##括起来。
1.在代码中先建立一个需要解析的SQL,后面需要变成配置方式

/// /// 暂时用于测试/// static string _sql = "SELECT * FROM TB_USER WHERE ID = #ID# AND NAME LIKE '%#NAME#%'";

2.建立一个根据参数KEY去解析的方法,一般情况下都是使用此方法

/// /// 根据SQL和参数集合解析成需要执行的SQL/// /// /// /// 
public static string AnalyticalByDic(string str, Dictionary
dic){ str = str.ToUpper(); foreach (var item in dic) { str = str.Replace(string.Format("#{0}#", item.Key.ToUpper()), item.Value); } return str;}

3.建立一个根据顺序解析的方法,不推荐使用此方法

/// /// 根据SQL和参数集合解析成需要执行的SQL/// /// /// /// 
public static string AnalyticalByList(string str, List
list){ str = str.ToUpper(); List
sqlList = new List
(); var sqlstr = str; int i = 0; int j = 0; int sum = 0; while (true) { i = str.Substring(sum, str.Length - sum).IndexOf('#') + 1; sum += i; j = str.Substring(sum, str.Length - sum).IndexOf('#'); if (i < 0 || j < 0) { break; } sqlList.Add(str.Substring(sum, j)); sum += j + 1; } for (int index = 0; index < sqlList.Count && index < list.Count; index++) { str = str.Replace(string.Format("#{0}#", sqlList[index].ToUpper()), list[index]); } return str;}

4.方法建好了,就试一下DEMO看看效果,直接在Main里面调用就好

static void Main(string[] args){    Dictionary
dic = new Dictionary
(); dic.Add("ID", "123"); dic.Add("Name", "jimmy.pan"); string sql = _sql; Console.WriteLine(AnalyticalByDic(sql, dic)); List
list = new List
(); list.Add("456"); list.Add("jimmy"); sql = _sql; Console.WriteLine(AnalyticalByList(sql, list)); Console.Read();}

5.运行结果如下图

6.整体代码

using System;using System.Collections.Generic;namespace SQLAnalytical{    class Program    {        static void Main(string[] args)        {            Dictionary
dic = new Dictionary
(); dic.Add("ID", "123"); dic.Add("Name", "jimmy.pan"); string sql = _sql; Console.WriteLine(AnalyticalByDic(sql, dic)); List
list = new List
(); list.Add("456"); list.Add("jimmy"); sql = _sql; Console.WriteLine(AnalyticalByList(sql, list)); Console.Read(); } ///
/// 根据SQL和参数集合解析成需要执行的SQL /// ///
///
///
public static string AnalyticalByDic(string str, Dictionary
dic) { str = str.ToUpper(); foreach (var item in dic) { str = str.Replace(string.Format("#{0}#", item.Key.ToUpper()), item.Value); } return str; } ///
/// 根据SQL和参数集合解析成需要执行的SQL /// ///
///
///
public static string AnalyticalByList(string str, List
list) { str = str.ToUpper(); List
sqlList = new List
(); var sqlstr = str; int i = 0; int j = 0; int sum = 0; while (true) { i = str.Substring(sum, str.Length - sum).IndexOf('#') + 1; sum += i; j = str.Substring(sum, str.Length - sum).IndexOf('#'); if (i < 0 || j < 0) { break; } sqlList.Add(str.Substring(sum, j)); sum += j + 1; } for (int index = 0; index < sqlList.Count && index < list.Count; index++) { str = str.Replace(string.Format("#{0}#", sqlList[index].ToUpper()), list[index]); } return str; } ///
/// 暂时用于测试 /// static string _sql = "SELECT * FROM TB_USER WHERE ID = #ID# AND NAME LIKE '%#NAME#%'"; }}

 

转载于:https://www.cnblogs.com/Jimmy-pan/p/4261815.html

你可能感兴趣的文章
WPF动画设置1(转)
查看>>
基于node/mongo的App Docker化测试环境搭建
查看>>
java web 中base64传输的坑
查看>>
秒杀9种排序算法(JavaScript版)
查看>>
Activiti入门 -- 环境搭建和核心API简介
查看>>
struts.convention.classes.reload配置为true,tomcat启动报错
查看>>
MySQL的并行复制多线程复制MTS(Multi-Threaded Slaves)
查看>>
好玩的-记最近玩的几个经典ipad ios游戏
查看>>
MySQL更改默认的数据文档存储目录
查看>>
PyQt5--EventSender
查看>>
Sql Server 中由数字转换为指定长度的字符串
查看>>
Java 多态 虚方法
查看>>
Unity之fragment shader中如何获得视口空间中的坐标
查看>>
万能的SQLHelper帮助类
查看>>
tmux的简单快捷键
查看>>
[Swift]LeetCode922.按奇偶排序数组 II | Sort Array By Parity II
查看>>
Html5 离线页面缓存
查看>>
《绿色·精简·性感·迷你版》易语言,小到不可想象
查看>>
Android打包key密码丢失找回
查看>>
VC6.0调试技巧(一)(转)
查看>>