在我们的日常编程中,数据库的程序基本上都要与SQL语句打交道,SQL语句的编写不可避免的成为一个头疼的工作。且因为SQL语句是STRING类型,因此在编译阶段查不出错,只有到运行时才能发现错误。
本文的解决方案,通过自动生成SQL语句,在一定程度上降低出错的概率,从而提高编程效率。
public interface IClause
{
void Add(string name, object val);
void AddWhere(string name, object val);
void Clear();
string TableName { set;}
}
首先抽象出生成器的标准接口,Add及Addwhere,分别用增加字段及WHERE条件的,
比如说,在Insert状态下,Add("name","gates")相当于字段name的值为gates
在select状态下,Add("name","gates")相当于字段name的别名为gates即select name as gates
在update状态下,Add("name","gates")相当于字段name的值为gates即update name = "gates"
TableName属性即操作的表名
Clear()是为了一个实例多次应用,清空当前的字段及WHERE条件,表名的设置都通过TABLENAME属性设置
基类实现接口,通过基类的实现,从而有效的实现的代码屏蔽。
...{
private string m_strTable = string.Empty;
private Where m_oWhere = new Where();
protected BaseClause()
...{
this.m_strTable = string.Empty;
this.Clear();
}
public virtual void Add(string name, object val)
...{
}
public void AddWhere(string name, object val)
...{
this.m_oWhere.Add(name, val);
}
public void Clear()
...{
this.m_oWhere.Clear();
this.auxClear();
}
public string TableName
...{
set ...{ this.m_strTable = value; }
protected get ...{ return this.m_strTable; }
}
public sealed override string ToString()
...{
return this.ToStr + this.m_oWhere.ToString();
}
protected abstract string ToStr ...{ get;}
protected virtual void auxClear() ...{ }
}