一个很长很长的sql语句,大家在vs环境下一样怎么写?就是说一行太长太长的情况。
给个例子吧。不过,除了类似以下这种string str = "select a, b, c, d ";
str += "from table where a='" + strA + "' and ";
str += ...
...

解决方案 »

  1.   

    我大概问的是一行代码写成多行的问题。其实想想
    str += "...";也可以。不过,还是问问。
      

  2.   

    string str = 
      //可以这样写,我就是这样写的
     "select a, b, c, d " + 
     "from table where a='" + strA + "' and exists(" +
     "(Select aaa FROM tableb WHERE EXISTS" + 
     "(SELECT j FROM tablec LEFT OUTER JOIN tab2 ON tab1.c3 = tab2.c3" +
     "RIGHT OUTER JOIN tab3 LEFT OUTER JOIN tab4" +
     "ON tab3.c1 = tab4.c1" +
     "ON tab2.c3 = tab4.c3";
      

  3.   

    可能yuanarea(超级赛亚人) 的答复就是我想要的吧。
    还有没有别的招呢?
      

  4.   

    StringBuilder str =new StringBuilder();
       str.Append("select a, b, c, d ");
       str.Append("from table where a='" + strA + "' and exists(");
       str.Append("(Select aaa FROM tableb WHERE EXISTS");
       str.Append("(SELECT j FROM tablec LEFT OUTER JOIN tab2 ON tab1.c3 = tab2.c3");
       str.Append("RIGHT OUTER JOIN tab3 LEFT OUTER JOIN tab4");
       str.Append("ON tab3.c1 = tab4.c1");
       str.Append("ON tab2.c3 = tab4.c3");
      

  5.   

    StringBuilder 与String 有什么不一样,Google一下就知道了
      

  6.   

    用三个显示器拼接!(玩笑)
    c#早已经设计好了,应该这样写:string str = @"
      select a, b, c, d 
        from table 
        where a='{0}' and 
        .....
        .....
      ";
    str=string.Format(str,strA);
      

  7.   

    表达式应该按照你在 SQL Server 查询分析器上的那种习惯,可以随时断行,首列缩进!这样才能一眼看清楚 SQL 的含义。
      

  8.   

    sp1234的方法好像better多了。
    对了,前面的@符号是干什么的?
      

  9.   

    to:jiangsheng(蒋晟.Net[MVP]) 
    说实话,我一直没学会在Oracle编写存储过程。
    觉得比sql server烦多了就一直没学,这种学习态度让自己惭愧哦。
      

  10.   

    动态生成SQL会有SQL注入的问题
      

  11.   

    @符号是特殊而又实用的C#符号。
       
    比如它在string中的应用。
       
    ⊙ ⊙ 字符@表示,其后的字符串是个“逐字字符串”(verbatim string)。 // 这个说法来自C# Primer 中文版(Stanley B. Lippman, 侯捷/陈硕合译)对于逐字字符串字面变量(verbatim string literal ),我们不再需要使用“转义序列”就可以指定反斜线之类的特殊字符。@的这个特点使得在表示文件路径时很方便。
      如:
      string str = @"C:\Test.txt";
       
    ⊙ ⊙ 另外一点,用@表示的字符串能够跨越数行。这数行之内的空白字符(White Space)都会保留在字符串里。
      这样便能允许存储和生成带有格式的文本块。
      如:
      string strText = @"Line1
      Line2
      Line3";
       
    ⊙ ⊙ 不知道大家在最初看到@的功能时有没有想,如果“转义序列”(\)在字符串中“失效”,那么想包含一个双引号("),怎么办?我找到了答案。
      方法很简单。在双引号之前再加一个双引号即可。等等...
      

  12.   

    sp1234(小事不逞强,大事不含糊。ThyBoy干事不含糊。) 的方法很好啊“动态生成SQL会有SQL注入的问题”什么意思啊,jiangsheng(蒋晟.Net[MVP])能不能讲一下啊
      

  13.   

    http://msdn.microsoft.com/msdnmag/issues/04/09/SQLInjection/
      

  14.   

    使用StringBuilder可以提高执行的效率,但也要根据情况进行使用.
    在文本行数相对较少的情况下,比如100行以下,两者之间的效率几乎没有差别,但如果需要的行数/数量更多,可以考虑使用StringBuilder.
    另外,写SQL语句一定不能急,一行一行的写,逻辑要清楚,容易看清楚及修改,我一般这样写
    string sql = "";
    sql = "select a.xx ";
    sql += "      b.xx ";
    sql += "      c.xx ";
    sql += " from table a,table b,table c ";
    sql += " where a.id = b.id ";
    sql += " and b.id = c.id ";
    sql += " and a.id = '" + xx + "' ";
    如上,一个一个分开写,看起来清楚,使用起来简单,容易修改/添加,语句之前之后都添加空格,使之尽可能不出现代码粘连的情况.
      

  15.   

    我一般是设置自动换行或者写成
    string strSQL = "select ....."+
        " from ...."+
        " where .... ";
    不过看到兄弟们说用@,试试
      

  16.   

    目前为止用@似乎最Pro.了。
    加上合理的分段。
      

  17.   

    str = ""
    str += "";
    =======
    StringBuilder sb = "";
    sb.Append();
    =========
    如果sql语句太长
    这两种方法都不太好,至少改动验证不方便,容易出错,总之有一种不好的味道在里面。
    最好用存储过程,如果实在不想用存储过程,写在配制文件里也是个方法
      

  18.   

    我喜欢看高手的回复。
    推荐使用@符号换行
    以及将他写入存储过程--Duwamish的例子里都是这么做的!
      

  19.   

    复杂的sql语句还是用存储过程好,修改不用编译.
      

  20.   

    在vb.net里有没有类似@这样的东西