注册本站  论坛  繁體中文

电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Dotnet >> C# >> Dotnet正文

C#中一套生成sql条件的类

文章来源:中国IT实验室收集整理 作者:佚名 更新时间:2008-5-25 3:56:18 【 】 【加入收藏

    在进行sql查询的时候,有时候要进行很多条件限制,自己来拼写SQLwhere条件容易出错,而且判断条件复杂,后期维护困难,基于这个原因我在一个小项目中写了一套生成sql条件的类。总共包括一个Condition类,与两个枚举型类型(LogicOper,CompareOper)
代码如下:
    public class Condition
    {
        static string [] logicOpers = new string[]{\"and\",\"or\"};
        static string [] compareOpers = new string[]{\">\",\"<\",\"<=\",\">=\",\"=\",\"<>\",\"like\",\"not like\",\"in\"};

        string compareOper=null;
        string name=null;
        string templateName = null;
        string valType=null;
        object val=null;
        public Condition(CompareOper co,string valType,string name,object val)
        {
            this.compareOper = compareOpers[(int)co];
            this.name = name;
            templateName = name;
            this.valType = valType;
            this.val = val;
        }
        public Condition(CompareOper co,string valType,string name,object val,string templateName)
        {
            this.compareOper = compareOpers[(int)co];
            this.name = name;
            this.templateName = templateName;
            this.valType = valType;
            this.val = val;
        }
        public Condition(){}

        public string toSqlString() [Page]
        {
            string []  arr1 =  (string[])operaters.ToArray(\"\".GetType());
            Condition []  arr2 =  (Condition[])conditions.ToArray((new Condition()).GetType());
            
            StringBuilder outStr = new StringBuilder();

            int count=0;
            if(name!=null&&val!=null)
            {
                outStr.Append(name);
                outStr.Append(\" \");
                outStr.Append(compareOper);
                outStr.Append(\" \");
                if(valType.ToLower()==\"int\"
                    ||valType.ToLower()==\"float\"
                    ||valType.ToLower()==\"double\"
                    ||valType.ToLower()==\"bool\"
                    ||valType.ToLower()==\"number\"

     )
                {
                    outStr.Append(val);
                } [Page]
                else if(valType.ToLower()==\"string\")
                {
                    string tmp = (string)val;
                    outStr.Append(\"’\"+tmp.Replace(\"’\",\"’’\")+\"’\");
                }
                else if(valType.ToLower()==\"date\")
                {
                    DateTime dt = (DateTime)val;
                    outStr.Append(\"’\"+dt.ToString(\"yyyy-MM-dd\")+\"’\");
                }
                else if(valType.ToLower()==\"datetime\")
                {
                    DateTime dt = (DateTime)val;
                    outStr.Append(\"’\"+dt.ToString(\"yyyy-MM-dd hh:mm:ss.fff\")+\"’\");
                }
                else
                {
                    string tmp = val.ToString();
                    outStr.Append(\"’\"+tmp.Replace(\"’\",\"’’\")+\"’\"); [Page]
                }
                count++;
            }



            if(arr1.Length>0)
            {
                for(int i=0;i<arr1.Length;i++)
                {
                    if(arr2[i].toSqlTempletString()==\"\")
                        continue;
                    count++;
                    if((name!=null&&val!=null)||count>1)
                    {
                        outStr.Append(\" \");
                        outStr.Append(arr1[i]);
                        outStr.Append(\" \");


                    }
                    outStr.Append(arr2[i].toSqlString());
                }
            }
            if(count>1)
            { [Page]
                outStr.Insert(0,’(’);
                outStr.Append(’)’);
            }
            return outStr.ToString();
        }

        public string toSqlTempletString()
        {
            string []  arr1 =  (string[])operaters.ToArray(\"\".GetType());
            Condition []  arr2 =  (Condition[])conditions.ToArray((new Condition()).GetType());
            
            StringBuilder outStr = new StringBuilder();

            int count=0;
            if(name!=null&&val!=null)
            {
                outStr.Append(name);
                outStr.Append(\" \");
                outStr.Append(compareOper);
                outStr.Append(\" @\");
                outStr.Append(templateName);
                count++;
            }

            if(arr1.Length>0)
            {
                for(int i=0;i<arr1.Length;i++) [Page]
                {
                    if(arr2[i].toSqlTempletString()==\"\")
                        continue;
                    count++;
                    if((name!=null&&val!=null)||count>1)
                    {
                        outStr.Append(\" \");
                        outStr.Append(arr1[i]);
                        outStr.Append(\" \");
                    }
                    outStr.Append(arr2[i].toSqlTempletString());
                }
            }

  if(count>1)
            {
                outStr.Insert(0,’(’);
                outStr.Append(’)’);
            }
            return outStr.ToString();
        }

        public SqlParameter [] getSqlParameters() [Page]
        {
            ArrayList tmp = new ArrayList();
            if(name!=null&&val!=null)
            {
                tmp.Add(new SqlParameter(\"@\"+templateName,val));
            }
            Condition []  arr =  (Condition[])conditions.ToArray((new Condition()).GetType());

            for(int i=0;i<arr.Length;i++)
            {
                 SqlParameter [] sps = arr[i].getSqlParameters();
                for(int j=0;j<sps.Length;j++)
                {
                        tmp.Add(sps[j]);
                }
            }
            return (SqlParameter [])tmp.ToArray(new SqlParameter(\"\",\"\").GetType());
        }
    
        ArrayList operaters  = new ArrayList();
        ArrayList conditions = new ArrayList();

        public void addCondition(LogicOper lo,Condition c)
        {
            operaters.Add(logicOpers[(int)lo]);
            conditions.Add(c); [Page]
        }

    }
    
    public enum LogicOper: int
    {
        and=0,or=1
    }
    public enum CompareOper: int
    {
        moreThan=0,lessThan=1,notMoreThan=2,notLessThan=3,equal=4,notEqual=5,like=6,notLike=7,IN=8
    }


/*----------------------------------------------------------------------------------------------------------------------------
使用如下:
            Condition condition =  new Condition(CompareOper.equal,\"string\",\"name\",\"%kkp%\");
            Condition condition2 =  new Condition(CompareOper.equal,\"int\",\"id\",1024);
            Condition condition3 =  new Condition(CompareOper.like,\"string\",\"nickName\",\"%’kkp’%\");
            Condition condition4 =  new Condition(CompareOper.equal,\"date\",\"age\",DateTime.Now);
            Condition condition5 =  new Condition(CompareOper.equal,\"datetime\",\"signTime\",DateTime.Now);
            Condition condition6 = new Condition();

 condition.addCondition(LogicOper.or,condition2);
            condition.addCondition(LogicOper.or,condition3);

            condition6.addCondition(LogicOper.or,condition4);
            condition6.addCondition(LogicOper.or,condition5);

            condition6.addCondition(LogicOper.and,condition);

            condition6.toSqlString();
            condition6.toSqlTempletString(); [Page]
            condition6.getSqlParameters();
通过Condition类的addCondition方法可以实现任意复杂的条件组合。toSqlString()方法返回sql条件,可以用于sql拼接方式使用。而toSqlTempletString()方式生成的是以参数形式的 sql条件,配合getSqlParameters()方法可以实现以参数传递的条件(相当于java中的prepareStatement实现)。

            condition6.toSqlString();
            condition6.toSqlTempletString();
的结果分别是:
(age = ’2007-07-16’ or signTime = ’2007-07-16 02:06:02.667’ and (name = ’%kkp%’ or id = 1024 or nickName like ’%’’kkp’’%’))

(age = @age or signTime = @signTime and (name = @name or id = @id or nickName like @nickName))

  • 上一篇Dotnet:

  • 下一篇Dotnet:
  • 最 新 热 门
     asp根据表单自动生成sql语句的函数
     ASP教程:自己写的数据库操作类
     ASP处理多关键词查询实例代码
     asp文件打不开的原因
     IIS7.0在Vista系统下安装注意事项
     XMLHTTP Post Form时的表单乱码
     xmlhttp是如何完成异步操作的
     VB.Net处理MySQL中二进制问题
     VB.NET的常量与枚举学习
     VB.NET字符数据类型和其他数据类型
    最 新 推 荐
     运用设计模式构建通用数据库访问类
     C#中使用钩子控制鼠标实现代码
     C#打开SolidWorks2008零件文件
     C# 实现屏幕键盘 (ScreenKeyboard)
     C#发现之旅第二讲_C#-XSLT开发
     C#数字格式化输出
     C#中通过API调用获取文件图标
     C#中一套生成sql条件的类
     C#汉字转拼音功能类
     DataGridView的常用用法
    相 关 文 章

    C#中使用钩子控制鼠标实现代码
    C#打开SolidWorks2008零件文件
    C# 实现屏幕键盘 (ScreenKeyboard)
    C#发现之旅第二讲_C#-XSLT开发
    C#数字格式化输出
    C#中通过API调用获取文件图标
    C#汉字转拼音功能类
    C#基础入门学习笔记
    C#正则表达式快速入门
    c#中重定向windows控制台程序的输出信息

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    本网站所有内容未经许可不得转载或做其他使用