zoukankan      html  css  js  c++  java
  • ASP.NET中小型软件系统中复合条件的查询

    复合条件的查询在于如何根据多种不同条件,正确的拼接出SQL字符串

    1,单表复合条件查询,如图所示:

    QQ截图未命名

    1,在系统Common类库中创建公共类SqlStringConstructor类用来构造sql语句。

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace shoppingcity.Common
    {
        public class SqlStringConstuctor
        {
            /// <summary>
            /// 在字符串的开头中间和结尾添加'
            /// </summary>
            /// <param name="pStr"></param>
            /// <returns></returns>
            public static String GetQuotedString(string pStr)
            {
                return ("'" + pStr.Replace("'", "''") + "'");
            }
    
            /// <summary>
            /// 组成Where 条件语句
            /// </summary>
            /// <param name="queryItems">Hashtable 条件的集合,类型和值</param>
            /// <returns>where 语句</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 " + SqlStringConstuctor.GetQuotedString("%" + item.Value.ToString() + "%");
    
                    }
                    else
                        if (item.Value.GetType().ToString() == "System.DateTime[]")
                        {
                            string[] time = item.Value.ToString().Split(',');
                            Where += item.Key.ToString() + " between " +
                                SqlStringConstuctor.GetQuotedString(((DateTime[])item.Value)[0].ToString()) + " and " +
                                SqlStringConstuctor.GetQuotedString(((DateTime[])item.Value)[1].ToString());
                        }
                        else
                        {
                            Where += item.Key.ToString() + "=" + item.Value.ToString();
                        }
                    Count++;
                }
                return Where;
            }
        }
    }
    2,在DAL类库中创建数据访问类:ItemAccess类:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    using shoppingcity.Common;
    using shoppingcity.DAL; 
    
    namespace shoppingcity.DAL
    {
        public class ItemAccess
        { 
    
            public DataSet Search(string sql)
            {
                DataSet ds = new DataSet();
                SqlDataAdapter da = null;
                DataBase db = new DataBase();
                da = db.CreateDataAdapter(CommandType.Text, sql, null, 1);
                da.Fill(ds);
                return ds;
            }
        }
    }
    
    

    3,在BLL类库中创建业务逻辑类ItemManager类。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    using shoppingcity.DAL;
    using shoppingcity.Model; 
    
    namespace shoppingcity.BLL
    {
        [Serializable]
        public class ItemManager
        {
            //私有成员图书详情数据访问类对象
            private static readonly ItemAccess dal = new ItemAccess(); 
    
            //图书检索方法
            public DataSet Search(string sql)
            {
                return dal.Search(sql);
            }
        }
    }
    
    

    4,在页面中调用使用相关类:

    private void BindGrid(string gsql)
    {
        ItemManager im = new ItemManager();
        DataSet ds = null;
        ds = im.Search(gsql);
        gvSearch.DataSource = ds;
        gvSearch.DataBind();
        lblShow.Text = "共找到" + ds.Tables[0].Rows.Count.ToString() + "条符合条件的记录";
        lblShow.ForeColor = Color.Red;
    } 
    
    protected void btnOK_Click(object sender, EventArgs e)
    {
        gvSearch.Visible = true;
        string gsql = "select * from item ";
        Hashtable ht = new Hashtable();                             //构造存储哈希表 键值对:列名+值(有类型)
        if(cbTitle.Checked)
            ht.Add("itemname",txtTitle.Text.Trim());
        if(cbAuthor.Checked)
            ht.Add("bookauthor",txtAuthor.Text.Trim());
        if(cbPress.Checked)
            ht.Add("publisher",txtPress.Text.Trim());
        gsql = gsql + SqlStringConstuctor.GetConditionClause(ht) + " order by publishdate Desc";
        ViewState["gsql"] = gsql;
        BindGrid(gsql);
    }
    
  • 相关阅读:
    uva 10491 Cows and Cars
    uva 10910 Marks Distribution
    uva 11029 Leading and Trailing
    手算整数的平方根
    uva 10375 Choose and divide
    uva 10056 What is the Probability?
    uva 11027 Palindromic Permutation
    uva 10023 Square root
    Ural(Timus) 1081. Binary Lexicographic Sequence
    扩展欧几里得(求解线性方程)
  • 原文地址:https://www.cnblogs.com/netact/p/1955603.html
Copyright © 2011-2022 走看看