可以让用户自定义查询条件,自定义显示字段的查询。类似于一些数据库中可视Sql语句,动态添加条件,询问思路,急啊

解决方案 »

  1.   

    那就是拼接Sql了
    前台用户选择字段嘛,
    后台就: string sql = "select " + 用户拼接的字段(以逗号分隔) + " from tb1 where 1=1";if(条件1){
      sql += "and 条件1";
    }
      

  2.   

    拼接字符串,并判断为不为空,为空就不连,不为空就用" and "+StrSql
      

  3.   

    这个简单了!
    拼接SQL!
    比如:左右2个窗口!左边 :开始时间,结束时间,ID用户点击 开始时间;右边出现:开始时间  (下拉,=,<=,>=,!=,<,>) 时间控件
    这样土星化界面咯!
    然根据 用户选择操作表,开始时候(字段) 去拼接 SQL
      

  4.   

    楼主呀,你可千万要记得使用这样条件的用户的权限呀,不然到时两三下就SQL入注成功,或挂个马什么的至于你说的动态SQL语句,没法子,只能像各位老大说的,拼凑,MS的PetShop也是用拼凑来处理动态SQL语句问题
      

  5.   


    // condition数组存了你要查询的条件
    public List<T> GetTByCondition(string[] condition)
    {
        string sql = "select * from TableName where 1=1 ";
        // if条件是用来约束查询条件的,根据实际情况判断
        if ("0" != condition[0])
        {
             sql += " and 字段1 = " + condition[0];
        }
        if ("0" != condition[1])
        {
             sql += " and 字段2 = " + condition[1];
        }
        if ("" != condition[2])
        {
             sql += " and 字段3 >= " + condition[2];
        }
        if ("" != condition[3])
        {
             sql += " and 字段4 <= " + condition[3];
        }
        // 自己的通用方法,通过sql查找信息用的
        return GetList(sql);
    }
      

  6.   

    参考:http://topic.csdn.net/u/20100209/14/5cf2cd7e-0e7b-41a0-a2c3-702ee4af3f71.html
    的1楼的答复,
    拼接sql时,对于数值型的,在拼接sql前判断是否数值,不是就报错;
    对于字符串型的,拼接sql前,把字符串里的单引号替换成2个单引号。
      

  7.   

    @param IS NULL OR param = @param
      

  8.   

    一个真正的SQL高手是不会用“Where 1=1”这种降低效率的语句的宁可写一个SqlJoin()函数来拼接。
      

  9.   


    每个控件获得的字符串值都用Replace("'","")方法将单引号过滤掉,就可以解决该问题。
      

  10.   

    cmdStr="selec * from table1 where 1=1";
    if(...!=string.empty)
    {
       cmdSt+="...............";
    }
      

  11.   

    可以动态添加参数。传个泛型List <SqlParameter>到后面再循环。不要拼接Sql字符串。一定要传参数话。。
      

  12.   

    我SqlServer用的少,没有言语权但是在Oracle9i以上版本,1=1已经不会影响效率了
    现在还有多少公司在用8i以前的版本呢?
      

  13.   

    动态添加参数?那如何在不拼接sql的情况下动态添加参数?
    你不一样要这么写:
    List <SqlParameter> arr = new List <SqlParameter>();
    if(条件1){ 
      sql += "and 字段1=@v字段1";
      arr.Add(new SqlParaMeter(...... 
    }
      

  14.   


    无论是拼接语句还是参数化,都需要这样类似的语句吧?
    如果不用"1=1 and ..",像#13楼那样参数化,or语句比and语句的效率更低。sql server会自动把or语句转化为union语句,不过也不会比where 1=1 and..效率高
    你说的sqljoin()函数能发个例子吗?我以前用过每个条件后面都加个"and",到最后trim掉最后一个"and",但这样跟"1=1"拼接在效率上几乎没有差别。
      

  15.   

    事实上,是可以不拼接的,在Oracle里可以这么写:
    and (id = :vId or :vId is null)这样写就不用拼接Sql了,每一次执行的sql都是一致的,这样第一次执行完后,后续的执行可以复用第一次的执行计划,
    但是这样的后果导致全表扫描,而不会走索引扫描
    效率低下。所以要根据实际情况来判断,是拼接sql还是不拼接。以上是我的经验。SqlServer不清楚。
      

  16.   

    这就是or语句啊。。那and之间怎么连起来呢?
      

  17.   

    select * from tb1 where 1=1
    and (id = :vId or :vId is null)
    and (name = :vName or :vName is null)注意:or后面跟的是参数,不是字段
      

  18.   

    呃,我明白,我的意思是不用or语句的情况下,怎么连and语句。。都说了or语句效率更低了
      

  19.   

    if(条件1){ 
      sql += "and 条件1"; 
    }----
    比如传的字符串。。method(string strName)
    sql+= "and [name] like %'"+ strName +"'% ";这是相当糟糕的。
      

  20.   

    拼接传过来的参数也是没问题的,比如这样:
    string a = Request.QueryString["id"];
    string sql = "select * from tb where id = '"+ a.Replace("'","''") +"'";
      

  21.   


    我当然不赞成13楼那样
    我和你的做法差不多,只是我把“And”加在每个条件的前面。当实际使用时,我根据前半部分的SQL语句来判断,如果前半部分已经用了Where了,那我就直接挂上去,如果前半部分没有用过Where,那么我就用SQLJoin,SQLJoin的作用是把条件语句的第一个And替换为Where。这样做当然跟1=1是有区别的,在某些数据库中,使用1=1会导致遍历每一条记录,会严重降低效率。
      

  22.   


    很有意思
    如果开发的是一个公开发行版本
    有成千上万的人在用
    难道你每个人都去问:“请问您用什么数据库?”?
    或者在说明文档里写上一句:本软件必须使用Oracle 9,使用版本8效能会降低。?本来如果能设计成与外部无关的,符合黑盒原理是最好的,你偏偏不,非要限制用户的动作,我不能说你有错,只能说你的程序质量不够高罢了。
      

  23.   

    你说的也很有意思
    就算是通用程序,你见过几个程序没有对数据库有限制的?
    包括游戏啥的,
    在说明里都有这样的语句:
    运行软件环境:
    WindowsXP或更高版本、SqlServer2000或更高版本
    硬件环境:
    可运行环境:CPU:P3以上版本,
    建议环境:CPU:P4以上版本
    如果你坚持你的意见,请列举出一些比较通用的大型的应用程序,没有数据库要求的而且照你所说,开发出来的程序应该连Oracle 1.0都要支持
    不然就是程序质量差那如果这样,我无话可说。
      

  24.   

    而且你看到没有,一般的游戏都这么写:
    可运行环境:CPU:P3以上版本, 
    建议环境:CPU:P4以上版本 
    人家有个可以运行的最低要求,和推荐要求你所谓的符合黑盒原理,只能尽量,没有哪个程序能做到完全
    如果你的程序都能做到,那你也不会在这里,应该是微软或sun之类的cto了
      

  25.   

    我估计你要是写环境需求,就得写:CPU:I7以上
    内存:8G以上
    操作系统:Windows 7以上你去卖吧,看看有几个人买你的软件什么东西不能凭想象,懂吗?一句“现在没几个人用ORACLE 8.0I了吧”充分表明了你的无知。你不如说:“VISTA和WIN7都出来一年了,所以现在没几个人用XP了吧?所以我只支持WIN7有什么错呢?”真是无知者无畏。
      

  26.   

    你的回答充分证明了你的无知,
    你知道Oracle8什么时候上市的吗?Oracle9又是什么时候上市的吗?
    不知道就去了解清楚了再来说话如果你用Oracle8与Win98比较,还有点意思,因为它俩是一个时代的作品
    如果你现在写程序还在考虑能否在Win98上运行,那你真是太牛B了如果你还因为别人只兼容Win2000以上的版本,而bs别人,那你真是太装B了不说了,收拾一下,回家过年。
      

  27.   

    string sql="select * from table where 1=1";
    if(txt1.text!="")
    {
        sql+="and cloumn='1'"
    }
    if(txt2.text!="")
    {
        sql+="and cloumn='2'"
    }
    if(sql.length> 3)
    {
        sql= sql.Substring(3, sql.Length - 3);
    }
    return sql 
      

  28.   

    string sql="select * from table where 1=1";
    if(txt1.text!="")
    {
        sql+="and cloumn='1'"
    }
    if(txt2.text!="")
    {
        sql+="and cloumn='2'"
    }
    if(sql.length> 3)
    {
        sql= sql.Substring(3, sql.Length - 3);
    }
    return sql