2

我正在编写一个小型帮助程序库,它正在构建一些 SQL 并针对 SQL Server 数据库执行它。

我知道最好的方法是使用参数化查询而不是连接字符串,但这不是一个选项,因为我需要以人类可读的方式记录对数据库执行的所有查询,以便在查看时管理员他们可以自由地查看用于搜索的实际值在where子句中。

在将该字符串放入查询并执行之前,我必须转义哪些字符?

我知道单引号'是必须的,但我必须关心其他事情吗?

这是一些示例代码:

var condition = new Condition();
var table = new PersonTable();
condition.Add(table.Name.IsEqualTo("John's"));

这将转换为

WHERE [dbo].[Person].[Name] = N'John''s'

如果我只接受方法并用 逃避单人,你string如何IsEqualTo攻击'''

据我所知,SQL Server 只接受'字符串分隔符。

4

2 回答 2

9

任何已知字符集中的每个字符。

现在使用经过验证和接受的技术。

于 2013-10-15T12:55:40.740 回答
-3

您应该转义以下字符:

'-' because of '--' (comment)
'=' because of 1=1
'>' or '<' because of 1>0
'%' because of Like '%%'
char(39) because of it is equivalent to ' 
'"' because it can use in delimiters
'[',']' because it can use in delimiters
于 2013-10-15T13:17:01.617 回答