在VB6中如何转义字符串中的引号

18

我正在尝试对一个旧的VB网络应用程序进行一些小的更改,我需要在字符串内添加引号,但迄今为止没有成功。该字符串是:

Dim sql As String = "Select * from  Usertask Where UserId = " & Session("UserId") & " and JobID=" & ddlReqTask.SelectedValue

我需要在Session("UserID")值周围添加引号。


你需要双引号还是单引号?通常 SQL 使用单引号,我认为在字符串中使用不会有问题。 - Hans Kesting
@Adonis L,你可能想要更改问题的标题。可能更合适将其称为“在VB6中转义字符串中的引号”或类似的内容。 - Onorio Catenacci
7个回答

31
您可以使用""将引号插入字符串中,例如:

dim sometext as String = "Hello ""Frank"" how are you?"

这将给出:

Hello "Frank" how are you?


12

要转义引号,您只需要添加另一个引号,我相信这就是您所需的:

Dim sql As String = "Select * from  Usertask Where UserId = """ & Session("UserId") & """ and JobID=" & ddlReqTask.SelectedValue

6
这是一种SQL注入漏洞,您不应该这样做。通过这种方式,您允许用户通过提供类似于UserId的任何查询来执行他们想要执行的任何查询。
'; DROP TABLE Usertask; --

相反,使用参数。根据您执行SQL的方式,有不同的方法来执行它; 请向我们展示执行SQL查询的代码。


回答您的问题,

Dim StringWithQuotes As String = "Hello, I've got ""Quotes""!"

这个字符串将会被

你好,我有“引号”!


我认为这个主题不是关于 SQL 注入的。 - Nei
@Nei 不是必需的,但仍然很有用。 - DaveTheMinion

6
我建议您使用参数化SQL,而不是像这样构建一个临时SQL语句,因为这可能会让您暴露于SQL注入的风险中。这意味着您无需担心将引号连接到字符串中,同时还可以提高查询性能(假设使用的是SQL Server),因为它允许执行计划的缓存和重用。
例如:
Dim sql As String = "Select * from  Usertask Where UserId = ? AND JobID = ?"

然后向Command对象添加2个ADODB.Parameters,以提供2个参数的值,例如:

Set param = New ADODB.Parameter
param.Name = "@UserId"
param.Direction = adParamInput
param.Type = adVarChar
param.Size = (give size of user id field)
param.value = Session("UserId")
yourADOCommand.Parameters.Append param

同样的方法也适用于JobId参数。


@Adonis L - 将此标记为正确答案。该方法不需要担心有效载荷中包含单引号或双引号的内容。由于您在7年前提出了问题(并获得了答案),因此很难将任何内容标记为正确。 - barrypicker

4
您还可以在连接中使用Chr(34)
Dim sql As String = "Select * from  Usertask Where UserId = " & Chr(34) & Replace(Session("UserId"), Chr(34), Chr(34) & Chr(34)) & Chr(34) & " and JobID=" & CLng(ddlReqTask.SelectedValue)

无论哪种方式都可以(其他示例和这个示例)。有些人更喜欢这个,因为它可能会更少地引起混淆,然而上面的例子并不完全易读,也不是特别高深的技术。

发布包含SQL注入漏洞的代码是不好的行为。已编辑。 - rpetrich
1
这与上面包含SQL注入漏洞的答案有何不同?你为什么没有对此发表评论?另外,我并不推荐使用这种方法,它只是对一个问题的回答。在其他人已经提到了SQL注入漏洞的情况下,我看不出回答一个问题以扩展某人的知识如何是不好的。 - Ben

0

就像这样..

dim user_id as string="SomePerson"
debug.print "UserId=" & chr(34) & user_id & Chr(34)

生成..

UserID="SomePerson"   

0

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