Кавычки в строке в VB6 - PullRequest
18 голосов
/ 09 июля 2009

Я пытаюсь внести небольшие изменения в старое веб-приложение VB, мне нужно добавить кавычки внутри строки, мне пока не повезло. Строка

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

Мне нужно добавить кавычки вокруг значения Session ("UserID").

Ответы [ 7 ]

31 голосов
/ 09 июля 2009

Вы можете использовать "", чтобы вставить цитату в строку, например:

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

Что дает вам

Привет, "Фрэнк", как ты?

12 голосов
/ 09 июля 2009

Чтобы избежать цитаты, вам просто нужно добавить другую цитату, я считаю, что это то, что вам нужно:

Dim sql As String = "Select * from  Usertask Where UserId = """ & Session("UserId") & """ and JobID=" & ddlReqTask.SelectedValue
6 голосов
/ 09 июля 2009

Я бы порекомендовал вам использовать параметризованный SQL вместо создания специального SQL-оператора, подобного этому, так как вы можете оставить себя открытым для внедрения SQL. Это означает, что вам не нужно беспокоиться о конкатенации кавычек в строку, а также об улучшении производительности запросов (при условии использования сервера sql), поскольку это позволяет кэшировать и повторно использовать план выполнения.

, например

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.

5 голосов
/ 09 июля 2009

Это уязвимость в SQL-инъекции, и вы должны НЕ делать это. Делая это таким образом, вы позволяете своим пользователям выполнять любой запрос, предоставляя вам UserId вроде

'; DROP TABLE Usertask; --

Вместо этого используйте параметры. В зависимости от того, как вы выполняете SQL, существуют разные способы сделать это; Пожалуйста, покажите нам код, который выполняет запрос SQL.


В ответ на ваш вопрос,

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

Эта строка будет

Здравствуйте, у меня есть "Цитаты"!

4 голосов
/ 09 июля 2009

Вы также можете использовать 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)

В любом случае работает (другие примеры и этот). некоторые люди предпочитают этот, поскольку он может быть менее запутанным, однако приведенные выше примеры не совсем понятны и не являются ракетостроением

0 голосов
/ 02 сентября 2016

это так ..

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

производит ..

UserID="SomePerson"   
0 голосов
/ 09 июля 2009

Большинство SQL-серверов, по моему опыту, нуждаются в одинарных кавычках для строк. Лучший способ сделать это - позволить .net выбрать для вас, используя параметры SQL. Вот пример (также в VB.Net): http://www.knowdotnet.com/articles/dynamicsqlparameters.html
Это также дает преимущество в защите от SQL-инъекций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...