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

时间:2009-07-09 10:44:52

标签: vb6

我正在尝试对旧的VB Web应用程序进行一些小的更改我需要在字符串中添加引号到目前为止我没有运气。字符串是

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

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

7 个答案:

答案 0 :(得分:31)

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

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

哪个给你

你好“弗兰克”你好吗?

答案 1 :(得分:12)

要逃避报价,您只需要添加另一个报价,我相信这就是您所需要的:

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

答案 2 :(得分:6)

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

e.g。

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

然后将2个ADODB.Parameters添加到Command对象以提供2个参数的值 e.g。

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参数也是如此。

答案 3 :(得分:5)

这是一个SQL注入漏洞,你应该这样做。通过这种方式,您可以通过为用户提供类似

的用户来允许用户执行他们想要的任何查询
'; DROP TABLE Usertask; --

相反,请使用参数。根据您执行SQL的方式,有不同的方法可以执行;请告诉我们执行SQL查询的代码。


回答你的问题,

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

此字符串将是

你好,我有“行情”!

答案 4 :(得分: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)

无论哪种方式都有效(其他例子和这个例子)。有些人更喜欢这个,因为它可能不那么令人困惑,但上面的例子并不是完全可以辨认出来的,并且不是很狡猾的火箭科学

答案 5 :(得分:0)

根据我的经验,大多数SQL服务器都需要单引号字符串。 最好的方法是使用SQL参数让.net为您服务。这是一个示例(也在VB.Net中):http://www.knowdotnet.com/articles/dynamicsqlparameters.html
这也具有针对SQL注入的安全性的好处。

答案 6 :(得分:0)

就像这样..

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

生产..

UserID="SomePerson"