在表示 sql 查询的字符串中转义双引号字符

Escape double quote character in string representing a sql query

我正在尝试使用字符串来表示 VB 中的 SQL 查询。即

dim sSql As string
sSql = "SELECT thing FROM example where xml NOT LIKE '%<FUNDED YESNO=""YES"">%'"

问题是,当它被传递给 SQL 时,它似乎传递了我在这里用来转义的双引号 YESNO=""YES"" 这会导致问题。

转义这些双引号的正确方法是什么?我试过了

sSql = "SELECT thing FROM example where xml NOT LIKE '%<FUNDED YESNO=" & Chr(34) & "YES" & Chr(34) & ">%'

无果。

就个人而言,无论如何我都倾向于使用参数化查询:

Dim Sql As string = "SELECT thing FROM example where xml NOT LIKE '%' + @Search + '%'"
Using cn As New SqlConnection("connection string here"), _
      cmd As New SqlCommand(Sql, cn)

    cmd.Parameters.Add("@xml", SqlDbType.NVarChar, 4000).Value = "<FUNDED YESNO=""YES"">"
    cn.Open()

    ' ...
End Using

I promise 用于匹配的字符串最终将如下所示:

<FUNDED YESNO="YES">

无论如何,参数化查询倾向于回避此类问题,它们对于避免 SQL 注入错误和攻击非常重要。

现在您还可以轻松地将此代码重构为一种方法,您可以在其中发送您想要的任何搜索键。