SQL查找条件语句构造类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Collections;//引入哈希表命名空间

namespace Common
{
    /// <summary>
    /// SqlStringConstructor 的摘要说明
    /// 动态构造拼接sql语句,用于商品多项选择搜索时
    /// </summary>
    public class SqlConstructor
    {
        public SqlConstructor()
        {
        }
        /// <summary>
        /// 公有静态方法,将文本转换成适合在SQL语句里使用的字符串(就是在值外边加上两个'')
        /// </summary>
        /// <param name="pStr">要转换的文本</param>
        /// <returns>转换后的文本</returns>
        public static string GetQutoedString(string pStr)
        {
            return ("'" + pStr.Replace("'", "''") + "'");
        }

        /// <summary>
        /// 根据条件哈希表,构造SQL语句中的and条件句
        /// </summary>
        /// <param name="queryItems">条件哈希表</param>
        /// <returns>组合好的and 关系条件子句</returns>
        public static string GetConditionClause(Hashtable queryItems)
        {
            int count = 0;
            string where = "";
            //根据哈希表,循环生成条件语句
            foreach (DictionaryEntry item in queryItems)
            {
                if (count == 0) { where = " Where "; }
                else { where += " And "; }
                //根据查询列的数据类型,决定是否加单引号
                if (item.Value.GetType().ToString() == "System.String")
                {
                    where += "["+item.Key.ToString()+"]"
                    + " Like "
                    + SqlConstructor.GetQutoedString("%" + item.Value.ToString() + "%");
                }
                else if (item.Value.GetType().ToString() == "System.DateTime[]")
                {
                    //string[] time = item.Value.ToString().Split(',');
                    where += "[" + item.Key.ToString() + "]"
                          + " Between "
                          + SqlConstructor.GetQutoedString(((DateTime[])item.Value)[0].ToString("yyyy-MM-dd")) + " And "
                          + SqlConstructor.GetQutoedString(((DateTime[])item.Value)[1].ToString("yyyy-MM-dd"));
                }
                else if (item.Value.GetType().ToString() == "System.Decimal[]")
                {
                    decimal[] prices =(decimal [])item.Value;
                    where += "[" + item.Key.ToString() + "]"
                          + " Between "
                          + prices[0].ToString() + " And "
                          + prices[1].ToString();
                }
                else
                {
                    where += "[" + item.Key.ToString() + "]" + "= " + item.Value.ToString();
                }
                count++;
            }
            return where;
        }

    }

}

 

posted @ 2013-05-20 01:38  Net-Spider  阅读(479)  评论(1)    收藏  举报