2009-07-09 187 views
17

我想对旧的VB web应用程序做一些小的改动,我需要在字符串里面添加引号我到目前为止还没有运气。字符串是VB6中的字符串转义引号

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

我需要在会话(“UserID”)值周围添加引号。

+0

你需要双引号或单引号?通常SQL使用单引号,我不认为这将是一个字符串中的问题。 – 2009-07-09 10:54:22

+0

@Adonis L,你可能想要改变问题的标题。可能更适合称它为“在VB6中的字符串中引用引号”或者沿着这些行引用。 – 2009-07-09 11:00:22

回答

31

您可以使用""插入报价为一个字符串e.g:

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

,让你

你好 “弗兰克” 怎么是你?

12

为了逃避,你只需要添加一个报价报价,我相信这是你所需要的:

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

你也可以在concatentation使用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) 

无论哪种方式的作品(其他例子和这一个)。有些人喜欢这个,因为它可以减少混乱,但上面的例子中的arent完美ledgible和的arent exatly火箭科学

+0

发布包含SQL注入漏洞的代码是不好的形式。编辑。 – rpetrich 2009-07-10 18:23:04

+1

这与上面的答案有什么不同,也包含SQL注入漏洞。你怎么没有评论这个?另外,我不推荐使用这种方法,它只是对问题提出的答案。在其他人已经提到SQL注入漏洞的情况下,我没有看到如何回答扩展某些知识的问题是不好的。 – Ben 2009-07-13 08:24:24

4

这是一个SQL注入漏洞,你应该那样做。通过做这种方式,你允许你的用户通过给你一个用户ID喜欢

'; DROP TABLE Usertask; -- 

相反,使用参数来执行他们想要的任何查询。根据你如何执行SQL,有不同的方法来做到这一点;请向我们展示执行SQL查询的代码。


在回答你的问题,

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

此字符串将是

你好,我有 “行情”!

5

我建议你使用参数化的SQL,而不是像这样建立一个adhoc SQL语句,因为你可以让自己开放SQL注入。这意味着您不必担心将引号连接到字符串中,并且还可以提高查询性能(假设SQL Server),因为它允许执行计划缓存和重用。

例如

Dim sql As String = "Select * from Usertask Where UserId = ? AND JobID = ?" 

然后加入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参数又是一样的。

0

是这样的..

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

产生..

UserID="SomePerson"