string拼接的语句过长时,你们是怎么处理的?

lala133 2016-03-04 12:17:58
string拼接的sql语句过长时,可以换行也不影响看sql结构,你们是怎么处理的?

如图所示,我想拼接字符串,其中有变量,且不改变sql的查看结构,方便我是修改sql语句。
但是这样的拼接有问题,提示波浪线提示字符串过多。请问要怎么修改

下面是代码
 
time1 = dateTimePicker1.Text.Trim();
time2 = dateTimePicker2.Text.Trim();
string strAchievemen=@"
SELECT md , dm ,
reyj ,
reyjc ,
zyj
FROM MX
WHERE elcode = '0'
AND CONVERT(VARCHAR(10), tjrq, 120) >= '"+time1+"'
AND CONVERT(VARCHAR(10), tjrq, 120) <= '"+time2+"'
AND reyjc = dm
UNION ALL
SELECT md ,
dm ,
reyj ,
reyjc ,
zyj
FROM MXZXBGBF
WHERE elcode = '0'
AND CONVERT(VARCHAR(10), tjrq, 120) >='"+time1+"'
AND CONVERT(VARCHAR(10), tjrq, 120) <= '"+time2+"' ";
...全文
466 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
lala133 2016-03-04
  • 打赏
  • 举报
回复
引用 8 楼 lala133 的回复:
[quote=引用 5 楼 sp1234 的回复:] 不是什么“过长”。 重新学习一下 c#语言,学习一下 @"......" 中包含双引号该怎么写。
。[/quote]
引用 8 楼 lala133 的回复:
[quote=引用 5 楼 sp1234 的回复:] 不是什么“过长”。 重新学习一下 c#语言,学习一下 @"......" 中包含双引号该怎么写。
点醒了,我看看。[/quote]我里面有添加变量的,不是只是加双引号而已。我是加变量才用双引号和+来,发现错误
大鱼> 2016-03-04
  • 打赏
  • 举报
回复
比你这还长的我经常拼接,一看就是你拼接错误了,不是你拼接的过长啊
大鱼> 2016-03-04
  • 打赏
  • 举报
回复
引用 1 楼 u013402605 的回复:

//string.Format好像必须写一行才行
            string strAchievemen=string.Format ( "
            SELECT    md , dm ,
                      reyj ,
                      reyjc ,
                      zyj
            FROM      MX
            WHERE     elcode = '0'
                      AND CONVERT(VARCHAR(10), tjrq, 120) >= '{0}'
                      AND CONVERT(VARCHAR(10), tjrq, 120) <= '{1}'
                      AND reyjc = dm
            UNION ALL
            SELECT    md ,
                      dm ,
                      reyj ,
                      reyjc ,
                      zyj
            FROM      MXZXBGBF
            WHERE     elcode = '0'
                      AND CONVERT(VARCHAR(10), tjrq, 120) >='{0}'
                      AND CONVERT(VARCHAR(10), tjrq, 120) <= '{1}' ",time1,time2);
就用这种方式吧
lala133 2016-03-04
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
不是什么“过长”。 重新学习一下 c#语言,学习一下 @"......" 中包含双引号该怎么写。
点醒了,我看看。
lala133 2016-03-04
  • 打赏
  • 举报
回复
引用 4 楼 lovelj2012 的回复:
1、使用+=进行换行连接 2、使用StringBuilder分段追加
很多行的时候,这种方式就很麻烦,所以才问有没有其他方式。
lala133 2016-03-04
  • 打赏
  • 举报
回复
引用 2 楼 wddw1986 的回复:
不过基本很少碰到这种情况,大多数情况都是通过ORM方式访问数据库,不是极其特殊的情况程序里不会出现sql语句。
这种拼接方式麻烦,当很多行的时候要加很多。
江南小鱼 2016-03-04
  • 打赏
  • 举报
回复
1、使用+=进行换行连接 2、使用StringBuilder分段追加
Poopaye 2016-03-04
  • 打赏
  • 举报
回复
每行都要用双引号+加号括起来
zzyhost 2016-03-04
  • 打赏
  • 举报
回复

//string.Format好像必须写一行才行
            string strAchievemen=string.Format ( "
            SELECT    md , dm ,
                      reyj ,
                      reyjc ,
                      zyj
            FROM      MX
            WHERE     elcode = '0'
                      AND CONVERT(VARCHAR(10), tjrq, 120) >= '{0}'
                      AND CONVERT(VARCHAR(10), tjrq, 120) <= '{1}'
                      AND reyjc = dm
            UNION ALL
            SELECT    md ,
                      dm ,
                      reyj ,
                      reyjc ,
                      zyj
            FROM      MXZXBGBF
            WHERE     elcode = '0'
                      AND CONVERT(VARCHAR(10), tjrq, 120) >='{0}'
                      AND CONVERT(VARCHAR(10), tjrq, 120) <= '{1}' ",time1,time2);
  • 打赏
  • 举报
回复
不是什么“过长”。 重新学习一下 c#语言,学习一下 @"......" 中包含双引号该怎么写。
cheng2005 2016-03-04
  • 打赏
  • 举报
回复
不过基本很少碰到这种情况,大多数情况都是通过ORM方式访问数据库,不是极其特殊的情况程序里不会出现sql语句。
lala133 2016-03-04
  • 打赏
  • 举报
回复
引用 16 楼 BitCoffee 的回复:
没必要分这么多行吧。

string sql = "select column1,column2.... " //拼接时没行末尾或者开始带个空格
                  + "from table1 t1,table t2... "
                  + "where t1.id = t2.id .... " //where条件自己看情况断行即可
                  + "and t1.name = '"+strName+"' "
                  + "order by id desc ";
只为保留sql语句框架,方便查看语句和修改。13楼已经给出我要的结果了。谢谢大家给我上了一课。
lala133 2016-03-04
  • 打赏
  • 举报
回复
引用 15 楼 sp1234 的回复:
[quote=引用 5 楼 sp1234 的回复:] 不是什么“过长”。 重新学习一下 c#语言,学习一下 @"......" 中包含双引号该怎么写。
嗯,是终止一个@"......",然后开启下一个。不是包含双引号。[/quote] 嗯,我刚才也是看了楼上的另外一位朋友写的,才知道,是开启了下一个。谢谢你们啦,学习了。
BitCoffee 2016-03-04
  • 打赏
  • 举报
回复
没必要分这么多行吧。

string sql = "select column1,column2.... " //拼接时没行末尾或者开始带个空格
                  + "from table1 t1,table t2... "
                  + "where t1.id = t2.id .... " //where条件自己看情况断行即可
                  + "and t1.name = '"+strName+"' "
                  + "order by id desc ";
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
不是什么“过长”。 重新学习一下 c#语言,学习一下 @"......" 中包含双引号该怎么写。
嗯,是终止一个@"......",然后开启下一个。不是包含双引号。
lala133 2016-03-04
  • 打赏
  • 举报
回复
引用 13 楼 xuzuning 的回复:
            string strAchievemen = @"
            SELECT    md , dm ,
                      reyj ,
                      reyjc ,
                      zyj
            FROM      MX
            WHERE     elcode = '0'
                      AND CONVERT(VARCHAR(10), tjrq, 120) >= '" + time1 + @"'
                      AND CONVERT(VARCHAR(10), tjrq, 120) <= '" + time2 + @"'
                      AND reyjc = dm
            UNION ALL
            SELECT    md ,
                      dm ,
                      reyj ,
                      reyjc ,
                      zyj
            FROM      MXZXBGBF
            WHERE     elcode = '0'
                      AND CONVERT(VARCHAR(10), tjrq, 120) >='" + time1 + @"'
                      AND CONVERT(VARCHAR(10), tjrq, 120) <= '" + time2 + @"' ";
一开始你会给字符串常量加 @ 为什么到后来却又不会加了呢? 不加 @ 是不允许有换行的
第一次用这种方式写,所以找不到北,谢谢你的帮忙,你的写法正确。
xuzuning 2016-03-04
  • 打赏
  • 举报
回复
            string strAchievemen = @"
            SELECT    md , dm ,
                      reyj ,
                      reyjc ,
                      zyj
            FROM      MX
            WHERE     elcode = '0'
                      AND CONVERT(VARCHAR(10), tjrq, 120) >= '" + time1 + @"'
                      AND CONVERT(VARCHAR(10), tjrq, 120) <= '" + time2 + @"'
                      AND reyjc = dm
            UNION ALL
            SELECT    md ,
                      dm ,
                      reyj ,
                      reyjc ,
                      zyj
            FROM      MXZXBGBF
            WHERE     elcode = '0'
                      AND CONVERT(VARCHAR(10), tjrq, 120) >='" + time1 + @"'
                      AND CONVERT(VARCHAR(10), tjrq, 120) <= '" + time2 + @"' ";
一开始你会给字符串常量加 @ 为什么到后来却又不会加了呢? 不加 @ 是不允许有换行的
lala133 2016-03-04
  • 打赏
  • 举报
回复
引用 10 楼 qq_17486399 的回复:
[quote=引用 1 楼 u013402605 的回复:]

//string.Format好像必须写一行才行
            string strAchievemen=string.Format ( "
            SELECT    md , dm ,
                      reyj ,
                      reyjc ,
                      zyj
            FROM      MX
            WHERE     elcode = '0'
                      AND CONVERT(VARCHAR(10), tjrq, 120) >= '{0}'
                      AND CONVERT(VARCHAR(10), tjrq, 120) <= '{1}'
                      AND reyjc = dm
            UNION ALL
            SELECT    md ,
                      dm ,
                      reyj ,
                      reyjc ,
                      zyj
            FROM      MXZXBGBF
            WHERE     elcode = '0'
                      AND CONVERT(VARCHAR(10), tjrq, 120) >='{0}'
                      AND CONVERT(VARCHAR(10), tjrq, 120) <= '{1}' ",time1,time2);
就用这种方式吧[/quote] 我就是想不在一行的,在一行的话,我就不用问了。不在一行方便看语句,到时候修改的时候也方便。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧