如何在C#字符串中避免双引号转义?

6

在Ruby中,可以在字符串中使用双引号而无需转义,例如Q/Some my string with "double quotes"/

在C#中是否可以使用字符串而无需转义双引号? 由于某种原因,我需要编写内联SQL,每次将来自DB控制台的SQL查询放入C#代码时都需要转义双引号,这非常麻烦。

我知道可以使用\"或""作为一个双引号。但是有没有可能避免转义双引号的需要?


简单来说,不行。你可以使用@符号来停止“这是一个”+ [为了代码清晰而换行]“你不想放在一行上的长字符串”,但是没有办法避免转义。 - Paul Sullivan
3个回答

9
不是的。你有两种选择,分别是"foo \" bar"@"foo "" bar",你都已经提到了。不过,说实话,在 SQL 中我很少觉得需要使用";对于字面字符串,你可以使用',对于对象/列名,你可以使用[ / ]——当然,这可能只是因为我通常使用SQL Server。
唯一不需要任何转义的替代方法是将 SQL 移动到外部资源文件中,比如文本文件。不过,这可能比使用""更加痛苦。

3
我使用PostgreSQL,其中CamelCase命名需要用双引号进行转义。 - Zelid
@Zelid 是的,我怀疑你可能在使用与我不同的数据库引擎(我很少遇到这个问题)。抱歉,我想你只能选择哪个选项是最不糟糕的。 - Marc Gravell

5
不,C#中不可能实现这个。你可以在一个单独的文件中编写SQL,然后从那里读取它。

1
有一个很好的理由,我需要编写内联SQL,但每次将SQL查询从DB控制台放入C#代码时都需要转义双引号,这非常烦人。
如果您正在编写内联SQL查询,则无需担心引号,只需通过SqlParameters传递值即可。这样,您就不会在任何地方看到令人讨厌的双引号,甚至您的查询也将免于SQL注入的威胁。

我使用 Massive 作为轻量级数据库访问库。它总是使用 params 转义。当我使用 CamelCase 名称时,在 PostgreSQL 中需要在列和表名中使用双引号。 - Zelid
@Zelid 哦,既然这样,我同意到处都看到双引号会很烦人,我认为你没有其他选择。 - HatSoft
是的,我使用EF Core来处理所有内容。但有一个特殊情况,只需使用SQL更容易(例如,我编写的报告),并且似乎为此添加资源、读取等有点过度设计。 - Max Carroll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接