关于SQL语句的自动生成

发表于:2008-4-03 12:54

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:PeterXu    来源:PeterXu 的博客

        在我们的日常编程中,数据库的程序基本上都要与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 abstract class BaseClause : IClause
        
{
            
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() { }
        }


 

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号