C#是否使用逐字字符串创建奇怪的换行符?

时间:2014-05-06 14:23:10

标签: c# sql enterprise-library

我正在进行个人测试以尝试理解EnterpriseLibrary。我正在进行内联SQL查询:

string query = @"USE Database
                 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
                 SELECT * FROM table
                 WHERE table.column = 'sample'"

数据库,表格和列的名称已从原始名称更改

但是,在执行此查询时,我收到了

System.Data.SqlClient.SqlException: Incorrect syntax near 'USE'.

认为我的语法错误,我将此查询复制到SQL Server中并且它有效。然后我认为逐字字符串语法导致了问题......所以我使用了

string query = "USE Database " +
               "SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED " +
               "SELECT * FROM table " +
               "WHERE table.column = 'sample'"

看,它有效。我认为逐字字符串正在输入Enterprise Library无法正确解析的新行。我假设这是正确的吗?如果是这样,我如何操纵逐字符串才能使其工作?

更新: 尝试query.Replace("\r\n", "")它有效!

更新2: 尝试使用分号分隔符,这也有效!

企业图书馆的奥秘......

为什么分号分隔符有效?

2 个答案:

答案 0 :(得分:3)

逐字字符串将添加新行字符以及查询中指定的所有额外空格。所以对于你的字符串你会得到:

enter image description here

所以你的字符串看起来像USE Database \r\n space(s) SET TRANSACTION.......

请参阅:String C#

  

因为逐字字符串会将新行字符保留为   字符串文本,它们可用于初始化多行字符串。

不确定为什么Enterprise库不将其视为有效的SQL,您可以使用;分隔语句,然后尝试:

string query = @"USE Database;
                 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
                 SELECT * FROM table
                 WHERE table.column = 'sample';";

或者,如果您想从字符串中替换换行符,则可以执行以下操作:

query = query.Replace("\r\n", "");

答案 1 :(得分:-1)

是的,它会插入新行。

在执行查询之前,您可以执行以下操作以确保删除新行:

query = query.Replace('\n', ' ');