vb.net vbcrlf,environment.newline& vbcr无效

时间:2018-05-15 07:15:56

标签: vb.net

VB.Net代码

Dim sTest As String = "QueryLine1" & vbCrLf & "QueryLine2"

当前输出

  

" QueryLine1" &安培; vbCrLf& " QueryLine2"

我想看看

  

QueryLine1

     

QueryLine2

SQL查询

declare @now date,@dob date, @now_i int,@dob_i int, @days_in_birth_month int
declare @years int, @months int, @days int
set @now = '2013-02-28' 
set @dob = '2012-02-29' -- Date of Birth

set @now_i = convert(varchar(8),@now,112) -- iso formatted: 20130228
set @dob_i = convert(varchar(8),@dob,112) -- iso formatted: 20120229
set @years = ( @now_i - @dob_i)/10000
-- (20130228 - 20120229)/10000 = 0 years

set @months =(1200 + (month(@now)- month(@dob))*100 + day(@now) - day(@dob))/100 %12
-- (1200 + 0228 - 0229)/100 % 12 = 11 months

set @days_in_birth_month = day(dateadd(d,-1,left(convert(varchar(8),dateadd(m,1,@dob),112),6)+'01'))
set @days = (sign(day(@now) - day(@dob))+1)/2 * (day(@now) - day(@dob))
          + (sign(day(@dob) - day(@now))+1)/2 * (@days_in_birth_month - day(@dob) + day(@now))
-- ( (-1+1)/2*(28 - 29) + (1+1)/2*(29 - 29 + 28))
-- Explain: if the days of now is bigger than the days of birth, then diff the two days
--          else add the days of now and the distance from the date of birth to the end of the birth month 
select @years,@months,@days -- 0, 11, 28 

将其存储在变量中并执行存储的sql查询结果时为空。因为输入标记是存储在变量中的。

如果您在sql查询窗口中复制粘贴上面的sql查询,那么您将获得结果。但是当在vb.net变量中存储查询并执行查询结果时没有。

我尝试用一​​个小例子来强调这个问题,这就是为什么从一小段代码开始的。

1 个答案:

答案 0 :(得分:3)

你所说的实际上仍然没有办法实际发生,但无论如何,它甚至都不重要。如果你想要的是编写多行SQL查询,那么你根本不需要使用字符串连接。如果您正在使用VB 2015(或更高版本),那么您实际上可以编写多行String字面值,例如

        Dim query = "SELECT *
FROM MyTable
WHERE ID = 1"

如果您愿意,可以格式化文本以使文本排成一行,因为SQL不关心空格:

Dim query = "SELECT *
             FROM MyTable
             WHERE ID = 1"

如果您使用的是旧版本的VB,则可以使用XML文字:

        Dim sql = <sql>
SELECT *
FROM MyTable
WHERE ID = 1
                  </sql>
        Dim query = sql.Value

同样,如果需要,您可以使用空格格式化:

Dim sql = <sql>
            SELECT *
            FROM MyTable
            WHERE ID = 1
          </sql>
Dim query = sql.Value

如果您使用调试器查看query的值,那么如果它不能显示多行Strings,那么您现在应该仍然会看到同样的事情,但实际值将完全如同应该。