我正在进行个人测试以尝试理解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: 尝试使用分号分隔符,这也有效!
企业图书馆的奥秘......
为什么分号分隔符有效?
答案 0 :(得分:3)
逐字字符串将添加新行字符以及查询中指定的所有额外空格。所以对于你的字符串你会得到:
所以你的字符串看起来像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', ' ');