进行查询的不同方式

本文关键字:方式 查询 | 更新日期: 2023-09-27 18:31:31

我在 c# 程序中编写了一个查询,当我以这种方式键入它时它工作正常:

 query = " SELECT sa.f1 sort, fb.f5 dl, fa.f7 sh " +
         " FROM TC_OBJ2LINK with (nolock) " +
         " join tp_zag with (nolock) on tp_zag.f_key = f_obj_KEY " +
         " left join tp_zag_s sa with (nolock) on sa.f_parentkey = tp_zag.f_key and sa.f_row = 1 " +
         " left join tp_zag_f fa with (nolock) on fa.f_parentkey = tp_zag.f_key and fa.f_row = 1 " +
         " left join tp_zag_f fb with (nolock) on fb.f_parentkey = tp_zag.f_key and fb.f_row = 2 " +
         " WHERE F_OBJ_TYPE = 3 ";

但是当我这样写它时,它会返回一个错误,它不能与fa.f7绑定

query = @"
         SELECT sa.f1 sort, fb.f5 dl, fa.f7 sh
         FROM TC_OBJ2LINK with (nolock) 
         join tp_zag with (nolock) on tp_zag.f_key = f_obj_KEY 
         left join tp_zag_s sa with (nolock) on sa.f_parentkey = tp_zag.f_key and sa.f_row =1 
         left join tp_zag_f fa with (nolock) on fa.f_parentkey = tp_zag.f_key and fa.f_row = 1 
         left join tp_zag_f fb with (nolock) on fb.f_parentkey = tp_zag.f_key and fb.f_row = 2
         WHERE F_OBJ_TYPE = 3 ";

这两个查询有什么区别?为什么我在第二个查询中出现错误?

进行查询的不同方式

在第二个查询中,尽管您已经用多行编写了查询,但它们之间没有任何空格,就像在第一行中一样。因此,第二个查询中存在语法错误。当我们想要逐字制作字符串时,使用运算符 @

正如这里所说:

文本是将字符串硬编码到 C# 程序中的方式。有两个 C# 中字符串文本的类型 - 常规字符串文本和逐字 字符串。常规字符串文本类似于许多字符串文本中的文本 其他语言,如 Java 和 C - 它们以 "开头和结尾 ", 和 各种字符(特别是 " 本身、'' 和回车符 (CR) 和换行 (LF)) 需要"转义"才能在 字符串。逐字字符串文字几乎允许任何内容 他们,并在第一个"结束,没有加倍。均匀的运输 返回符和换行符可以出现在文字中!要获得" 字符串本身,需要写"。逐字字符串文字是 通过在开头引号前有一个 @ 来区分。这里有一些 两种类型的文字示例,以及它们的含义:

您在代码方面遇到的错误如下:

SELECT sa.f1 sort, fb.f5 dl, fa.f7 sh
FROM TC_OBJ2LINK with (nolock) 

将被解释为

SELECT sa.f1 sort, fb.f5 dl, fa.f7 shFROM TC_OBJ2LINK with (nolock)

你没有直接这样做,但我觉得你在这里问的是@。是的,它会为您处理转义,但是您更改了整个字符串,并且其中没有要转义的字符。在这种情况下,请尝试在屏幕上打印字符串,并查看其实际值以解决谜团。