VB6中的字符串转义引号
我想对旧的VB web应用程序做一些小的改动,我需要在字符串里面添加引号我到目前为止还没有运气。字符串是VB6中的字符串转义引号
Dim sql As String = "Select * from Usertask Where UserId = " & Session("UserId") & " and JobID=" & ddlReqTask.SelectedValue
我需要在会话(“UserID”)值周围添加引号。
您可以使用""
插入报价为一个字符串e.g:
dim sometext as String = "Hello ""Frank"" how are you?"
,让你
你好 “弗兰克” 怎么是你?
为了逃避,你只需要添加一个报价报价,我相信这是你所需要的:
Dim sql As String = "Select * from Usertask Where UserId = """ & Session("UserId") & """ and JobID=" & ddlReqTask.SelectedValue
你也可以在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火箭科学
这是一个SQL注入漏洞,你应该不那样做。通过做这种方式,你允许你的用户通过给你一个用户ID喜欢
'; DROP TABLE Usertask; --
相反,使用参数来执行他们想要的任何查询。根据你如何执行SQL,有不同的方法来做到这一点;请向我们展示执行SQL查询的代码。
在回答你的问题,
Dim StringWithQuotes As String = "Hello, I've got ""Quotes""!"
此字符串将是
你好,我有 “行情”!
根据我的经验,大多数SQL服务器都需要单个字符串报价。 最好的办法是让.NET通过使用SQL参数为你保留。下面是一个示例(同样在VB.Net中):http://www.knowdotnet.com/articles/dynamicsqlparameters.html
这也有对SQL注入的安全性的好处。
我建议你使用参数化的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参数又是一样的。
是这样的..
dim user_id as string="SomePerson"
debug.print "UserId=" & chr(34) & user_id & Chr(34)
产生..
UserID="SomePerson"
你需要双引号或单引号?通常SQL使用单引号,我不认为这将是一个字符串中的问题。 – 2009-07-09 10:54:22
@Adonis L,你可能想要改变问题的标题。可能更适合称它为“在VB6中的字符串中引用引号”或者沿着这些行引用。 – 2009-07-09 11:00:22