我正在尝试对旧的VB Web应用程序进行一些小的更改我需要在字符串中添加引号我到目前为止没有运气 . 字符串是
Dim sql As String = "Select * from Usertask Where UserId = " & Session("UserId") & " and JobID=" & ddlReqTask.SelectedValue
我需要在Session(“UserID”)值周围添加引号 .
您可以使用 "" 将引号插入字符串中,例如:
""
dim sometext as String = "Hello ""Frank"" how are you?"
哪个给你
你好“弗兰克”你好吗?
要逃避报价,您只需要添加另一个报价,我相信这就是您所需要的:
Dim sql As String = "Select * from Usertask Where UserId = """ & Session("UserId") & """ and JobID=" & ddlReqTask.SelectedValue
我建议您使用参数化SQL而不是像这样构建一个adhoc SQL语句,因为您可以让自己开放SQL注入 . 这意味着您不必担心将引号连接到字符串中,还需要提高查询性能(假设是sql server),因为它允许执行计划缓存和重用 .
例如
Dim sql As String = "Select * from Usertask Where UserId = ? AND JobID = ?"
然后将2个ADODB.Parameters添加到Command对象,以提供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参数也是如此 .
这是一个SQL注入漏洞,您应该 NOT 这样做 . 通过这种方式,您允许用户通过为您提供UserId来执行他们想要的任何查询
'; DROP TABLE Usertask; --
相反,使用参数 . 根据您执行SQL的方式,有不同的方法可以执行;请告诉我们执行SQL查询的代码 .
在回答你的问题时,
Dim StringWithQuotes As String = "Hello, I've got ""Quotes""!"
这个字符串将是
你好,我有“行情”!
您也可以在连接中使用 Chr(34) .
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服务器需要单引号字符串 . 最好的方法是使用SQL参数让.net为您服务 . 这是一个示例(也在VB.Net中):http://www.knowdotnet.com/articles/dynamicsqlparameters.html这也具有针对SQL注入的安全性的好处 .
就像这样..
dim user_id as string="SomePerson" debug.print "UserId=" & chr(34) & user_id & Chr(34)
生产环境 ..
UserID="SomePerson"
7 回答
您可以使用
""
将引号插入字符串中,例如:dim sometext as String = "Hello ""Frank"" how are you?"
哪个给你
你好“弗兰克”你好吗?
要逃避报价,您只需要添加另一个报价,我相信这就是您所需要的:
我建议您使用参数化SQL而不是像这样构建一个adhoc SQL语句,因为您可以让自己开放SQL注入 . 这意味着您不必担心将引号连接到字符串中,还需要提高查询性能(假设是sql server),因为它允许执行计划缓存和重用 .
例如
然后将2个ADODB.Parameters添加到Command对象,以提供2个参数的值,例如:
对于JobId参数也是如此 .
这是一个SQL注入漏洞,您应该 NOT 这样做 . 通过这种方式,您允许用户通过为您提供UserId来执行他们想要的任何查询
相反,使用参数 . 根据您执行SQL的方式,有不同的方法可以执行;请告诉我们执行SQL查询的代码 .
在回答你的问题时,
这个字符串将是
你好,我有“行情”!
您也可以在连接中使用
Chr(34)
.无论哪种方式都有效(其他例子和这个例子) . 有些人更喜欢这个,因为它可能不那么令人困惑,但是上面的例子并不是完全可以辨认出来的,并不是很好的火箭科学
根据我的经验,大多数SQL服务器需要单引号字符串 . 最好的方法是使用SQL参数让.net为您服务 . 这是一个示例(也在VB.Net中):http://www.knowdotnet.com/articles/dynamicsqlparameters.html
这也具有针对SQL注入的安全性的好处 .
就像这样..
生产环境 ..