一药库项目,需要万能查询功能没有什么具体的需求希望大家帮助想想设计思路不要太复杂的就可以!

解决方案 »

  1.   

    教客户写sql,想怎么查怎么查
      

  2.   

    什么是万能查询?select * ??学习一下.
      

  3.   

    楼主意思我明白,是让客户自己选择要的字段,再动态生成sql吧,这个不难吧string sql = "select * from ";
    sql += "客户选择字段1,";
    sql += "客户选择字段2";
    ...
    sql += " from tableName "
    sql += " where " + 客户要的条件 
    sql += " Order by " + " 客户要的排序方式"这样就生成了,然后查询返回一个dataset;
    dataGrid.DataSouce = dataset.Tables[0].DefaultView;就好了
      

  4.   

    上面一个语句要改一下,不好意思 *^_^*string sql = "select * from "; ==> string sql = "select ";去掉" * from",楼主一看就明白了.
      

  5.   

    以前做过一个客户可以随意增加查询节点的树
    就是用户可以随意输入查询条件,保存成树节点,点击节点就根据这个节点的查询条件查询思路就是:
    把所有的需要查询的字段列出来
    关系作一个,比如大于,小于,包含之类的
    还有就是值然后根据输入生成相应的sql语句,可以存放在一个字段里
    每次查询的时候去根据这个sql语句来查
      

  6.   

    界面你可以参考sql2000的视图设计
      

  7.   

    使用下拉菜单
    再下拉菜单的onchange事件中再加载下一个下拉菜单
      

  8.   

    设计能组合成单个条件的一系列自定义控件,可以指定字段名,关系操作符,参数值,(可选参数集合)、和后续条件的组合关系以及提示信息;定义一个属性返回条件字符串。
    这一系列控件包括:文本框、数值区间、CheckBox、ComboBox、DateTime或DateTime区间、RadioBox等。都从同一的条件接口派生。
    然后定义一个对话框基类,该对话框能自动搜索自控件中实现上述条件接口的控件,获取相应条件字符串,组合成为最终的条件字符串。
    最后,从该对话框派生,放置各种需要的控件,设置参数属性。
      

  9.   

    JasonHeung(拥有一切也不过就这样笑着哭) 的思路真不错我正考虑需要怎么设计类呢谢谢先明天结帖!
      

  10.   

    一个自定义查询的类:
    using System;
    using System.Data;
    using System.Data.SqlClient;namespace BLL
    {
    /// <summary>
    /// Query 的摘要说明。
    /// </summary>
    public class Query
    {
    public bool iniDropFieldName(System.Web.UI.WebControls.DropDownList dropFieldName, string strTableName)
    {
    System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(dataWorkClass.SQLConnectionString);
    //返回当前环境中可查询的指定表或视图的列信息。
    System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand("sp_columns",conn);
    comm.CommandType=System.Data.CommandType.StoredProcedure;

    //指定表名。
    comm.Parameters.Add("@table_name",System.Data.SqlDbType.NVarChar,384);
    comm.Parameters["@table_name"].Value = strTableName; try
    {
    conn.Open();
    System.Data.SqlClient.SqlDataAdapter sqlDataAdapter = new System.Data.SqlClient.SqlDataAdapter(comm);
    DataSet ds = new DataSet();
    sqlDataAdapter.Fill(ds); dropFieldName.DataSource = ds;
    dropFieldName.DataTextField = "COLUMN_NAME";
    dropFieldName.DataBind(); if (ds.Tables[0].Rows.Count<1)
    {
    _strEorr = "对不起,在数据库中找不到表‘" + strTableName + "’或该表为空表!";
    return false;
    }
    else
    {
    _strEorr = "";
    return true;
    }
    }
    catch(System.Exception ex)
    {
    _strEorr = ex.Message;
    }
    finally
    {
    conn.Close();
    } return false;
    }
    public System.Data.DataSet QueryData(string strSQL)
    {
    DataSet ds = new DataSet();
    ds = dataWorkClass.DataBind(strSQL); if (ds!=null)
    {
    _intRecordCount = ds.Tables[0].Rows.Count;
    _strEorr = ""; return ds;
    }
    else
    {
    _strEorr = dataWorkClass.EorrMessage;
    _intRecordCount = 0;
    } return null;
    }}
      

  11.   

    设计思路可以用 JasonHeung(拥有一切也不过就这样笑着哭) 的
      

  12.   

    我在实际使用中不是返回一个字符串,而是返回一个类集合,如下所示: /// <summary>
    /// 条件
    /// 作者:JasonHeung
    /// </summary>
    public class Condition
    { #region 构造方法 public Condition(string fname,string strop,object objval)
    {
    fieldname = fname;
    op = strop;
    val = objval;
    }
    #endregion
                      #region 公共字段
                      public string LeftBracket
    {
    get
    {
    return leftbracket  
    }
    set
    {
    leftbracket   = value;
    }
    }
    public string LeftBracket
    {
    get
    {
    return leftbracket  
    }
    set
    {
    leftbracket   = value;
    }
    }
                      public string LeftBracket
    {
    get
    {
    return leftbracket  
    }
    set
    {
    leftbracket   = value;
    }
    }
    public string RightBracket
    {
    get
    {
    return rightbracket
    }
    set
    {
    rightbracket= value;
    }
    }
    public string Relation
    {
    get
    {
    return relation
    }
    set
    {
    relation= value;
    }
    }                  #endregion
    #region 私有字段 private string leftbracket  = ""; private string fieldname = ""; private string op = ""; private object val = null; private string rightbracket = ""; private string relation = " AND "; #endregion #region 公共方法 public override string ToString()
    {

    return leftbracket + fieldname + " " + op + " " + DataAccessbase.ValToParmStr(val) + rightbracket + " " + relation + " ";
    }
    #endregion }
    /// <summary>
    /// 条件集合
    /// 作者:JasonHeung
    /// </summary>
    public class ConditionCollection : AddCollectionBase
    { #region 构造方法 public ConditionCollection()
    {
    }
    public ConditionCollection(Condition condition)
    {
    Add(condition);
    }
    #endregion #region 特性 public Condition this[int nIndex]
    {
    get
    {
    return (Condition)List[nIndex];
    }
    set
    {
    while (nIndex >= List.Count) List.Add(null);
    List[nIndex] = value;
    }
    }
    #endregion #region 公共方法 public override string ToString()
    {
    int i ;
    string str = "";
    if (Count > 0)
    {
    Condition  c = this[Count - 1];
    c.relation = "";
    for (i = 0; i < Count;++i) str += List[i].ToString();
    }
    return str;
    }
    /// <summary>
    /// 将一个集合添加
    /// </summary>
    /// <param name="cc">条件集合</param>
    public void AddCollection(ConditionCollection cc)
    {
    int i;
    for (i = 0 ; i < cc.Count; ++i)
    {
    Add(cc[i]);
    }
    }
    #endregion }
      

  13.   

    上面整理一下:
    /// <summary>
    /// 条件
    /// 作者:JasonHeung
    /// </summary>
    public class Condition
    { #region 构造方法 public Condition(string fname,string strop,object objval)
    {
    FieldName = fname;
    op = strop;
    val = objval;
    }
    #endregion #region 公共字段 public string LeftBracket
    {
    get
    {
    return leftBracket; 
    }
    set
    {
    leftBracket   = value;
    }
    }
    public string FieldName
    {
    get
    {
    return fieldName; 
    }
    set
    {
    fieldName   = value;
    }
    }
    public object Val
    {
    get
    {
    return val ;
    }
    set
    {
    val   = value;
    }
    }
    public string RightBracket
    {
    get
    {
    return rightBracket;
    }
    set
    {
    rightBracket= value;
    }
    }
    public string Relation
    {
    get
    {
    return relation;
    }
    set
    {
    relation= value;
    }
    }

    #endregion #region 私有字段 private string leftBracket  = ""; private string fieldName = ""; private string op = ""; private object val = null; private string rightBracket = ""; private string relation = " AND "; #endregion #region 公共方法 public override string ToString()
    {

    return leftBracket + FieldName + " " + op + " " + DataAccessbase.ValToParmStr(val) + rightBracket + " " + relation + " ";
    }
    #endregion }
      

  14.   

    to : JasonHeung(拥有一切也不过就这样笑着哭) 
    谢谢你的指导啊,看来你做过这个东西,能说说你是怎么存储数据的吗??用数据库是吗??
      

  15.   

    sql语句就是用来访问数据库的,数据是存放在数据库。
    一个补充: /// <summary>
    /// 将对象的值转为字符串表示
    /// </summary>
    /// <param name="val">对象</param>
    /// <returns>对象的值的字符串表示</returns>
    public static string ValToParmStr(object val)
    {
    string strParm = "";
    if (val is System.String)
    {
    string s = (string)val;
    if (s.ToUpper().IndexOf("SELECT") < 0) strParm = "'" + (string)val + "'";
    else strParm = (string)val;
    }
    else if (val is System.DateTime)
    {
    strParm = "'" + val.ToString() + "'";
    }
    else
    {
    strParm =  val.ToString();
    }
    return strParm;
    }