描述:前台以get方式提交,url带的参数不定!后台需要动态获取参数拼接SQL语句。
例如:http://www.*****.aspx?pram1=12&pram2=中文&pram3=类型&pram4=哈哈
注意,上面的参数有可能只有两个、一个也可以没有,参数的类型有int和string后台有什么好的方法动态拼接没有???
求解拼接出来的sql语句,例string strSql = "select col1,col2,col3 from t_name where pram1=1 and pram2=中文 and pram3=类型 and pram4=哈哈";

解决方案 »

  1.   

    你获取的时候判断是否为空。Request.QueryString["a"]=null?"":Request.QueryString["a"];
    这样来判断。然后过滤下 拼接就行了Request.QueryString.Count 获取参数个数 在进一步判断
      

  2.   

    遍历所有 QueryString                foreach (string str in Request.QueryString.Keys)
                    { 
                        switch (str)
                        { 
                             case "pram1":
                                  
                                  break;
                             .......
                        }
                    }
      

  3.   

    JSON字串传递,后台直接parse到查询条件对象中去。
      

  4.   

    在sql文最后加上"where 1=1"然后就挨个判断拼接。string strSql = "select .... from where 1=1";
    if (a不为空)
      += "and A=a";
    if (b不为空)
      += "and B=b";
    if (c不为空)
      += "and C=c";
      

  5.   

    Request.QueryString.Keys得到参数数组,你就可以再分析,再继续下一步了
      

  6.   

    http://www.*****.aspx?pram1=12&pram2=中文&pram3=类型&pram4=哈哈
    将红色部分截取下来str=url.Substring(url.IndexOf('?')+1);
    string commandText = "select * from TableName where 1=1";
    string[] arrStr = str.Split('&');
    for (int i = 0; i < arrStr.Length; i++)
    {
        commandText = commandText + " and " + arrStr[i];
    }
    Response.Write(commandText);
      

  7.   

    谢谢了。
    我用的Oracle数据库,
    select * from T_name where 1==1;就报错了继续求解
      

  8.   


    获取url参数就是使用 Request.QueryString[name]来获取。当它返回null值则表示没有这个参数。参数一律都是string,你需要自己转换为数据真正的强类型。对于string类型的值,当拼接到sql字符串时,需要处理参数值中的单引号(而不是简单地拼接到字符串)。
      

  9.   


    谢谢,这个方法不错。
    我用的ajax,感觉注入不是那么“明显”!!!
      

  10.   

    直接全部参数用一个连接符号拼接在一起~接收页面再spilce~~不过要注意防注入~
      

  11.   


    public static string getHeadTail(String url)
        {
            System.Net.WebResponse wr_result = null;
            StringBuilder txthtml = new StringBuilder();
            try
            {
                System.Net.WebRequest wr_req = System.Net.WebRequest.Create(url);
                wr_result = wr_req.GetResponse();
                System.IO.Stream ReceiveStream = wr_result.GetResponseStream();
                Encoding encode = System.Text.Encoding.GetEncoding("gb2312");
                System.IO.StreamReader sr = new System.IO.StreamReader(ReceiveStream, encode);
                if (true)
                {
                    Char[] read = new Char[256];
                    int count = sr.Read(read, 0, 256);
                    while (count > 0)
                    {
                        String str = new String(read, 0, count);
                        txthtml.Append(str);
                        count = sr.Read(read, 0, 256);
                    }
                }
            }
            finally
            {
                if (wr_result != null)
                {
                    wr_result.Close();
                }
            }
            return txthtml.ToString();
        }