2009-07-09 101 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" 
相關問題