机房重构——组合查询(知识点总结)
程序员文章站
2022-06-09 21:26:40
...
昨天把组合查询敲完了,过程查了不少的博客,下面总结下遇到的知识点
知识点
- 模板方法
- 存储过程(SQL语句拼接)
组合查询就是多条件查询,一条查询语句WHERE后面的条件很多,而在机房中设计到组合查询的很多,就用到了模板方法
模板方法
官方定义
定义一个操作中的算法骨架,而将一些步骤延迟到子类。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
UML图
大话上总结:
当不变的可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。通过模板方法模式把这些行为搬移到单一的地方,这样就可以帮助子类摆脱重复的不变的行为的纠缠
自我理解:
定义上提到算法结构,算法是解决问题的一系列步骤,对于可重写的方法的算法结构本质上给你一个写好的公式,根据实际去套就可以了。算法结构便是重复的东西,将其抽象出来,子类去继承
实际应用
在windows窗体程序中可以继承一个窗体,因为窗体也是一个类嘛,下面是共有的操作
UML图
具体代码
//定义一个组合查询要查询的表名,在子窗体重写
public virtual string GetDbtableName()
{
return "";
}
//转换中文字符为英文字符,在子窗体进行重写
public virtual string GetEnglishFromField(string cbo)
{
return "";
}
//构造一个没有任何返回值的虚方法,来根据comboField的内容,出现相应下拉内容
public virtual void AddContent(ComboBox file, ComboBox mark,DateTimePicker picker,TextBox text)
{
}
窗体继承关系
假如窗体A,B,C
A:B(A继承了B,继承B里属性方法)
B:C(B继承了C)
所以可以得出
A:C
存储过程(SQL语句拼接)
首先看下在SQL sever中一条两个条件的查询语句
select * from Customer_Info where custID=1313 AND custName ='士大夫说的'
//注:在sql中数字型不需要带单引号,而字符串类型需要带单引号
再来看从C#中如何转化成下面的语句
static void Main(string[] args)
{
//在C#中custID和custName是变量因为可以换成别的值
int custID = 1313;
string custName = "士大夫说的";
//(+号拼接)
string strSQL = "select * from Customer_Info where custID='"+ custID + "' AND custName = '" + custName + "'";
Console.WriteLine(strSQL);
}
执行结果:
在这条字符串语句拼接逻辑是这样的
string strSQL = "select * from Customer_Info where custID='"+ custID + "' AND custName = '" + custName + "'";
//string strSQL =字符串+变量名+字符串+变量名+字符串
//select * from Customer_Info where custID='为字符串,别忘了后面的点哦
在组合查询存储过程SQL 语句拼接类似
@TempSql = 'SELECT * FROM ' aaa@qq.com+' WHERE 'aaa@qq.comaaa@qq.com+char(39)aaa@qq.com+char(39)
//还原下
//select * from work where custname='实打实'
//char(39)为单引号
//SELECT * FROM 为字符串
其中char(32)与char(39)分别是空格和单引号,下面解释为什么使用这个
在拼凑字符串时,把所有的参数都当成字符串处理,当查询条件本身包含特殊字符的时候,比如 ' 符号,或者其他需
要转义的字符时,你拼凑的SQL就被打断了
详见博客
https://www.cnblogs.com/wy123/p/5958047.html
上一篇: Java 数据结构与算法:递归实现八皇后问题、思路分析、代码实现
下一篇: 端口聚合实验