Вопрос по vb6 – Кавычки в строке в VB6

17

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

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

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

Вам нужны двойные кавычки или одинарные кавычки? Обычно SQL использует одинарные кавычки, и я не думаю, что это будет проблемой в строке. Hans Kesting
@ Adonis L, вы можете изменить название вопроса. Возможно, было бы более уместно назвать это «Кавычки в строке в VB6». Или что-то вдоль этих линий. Onorio Catenacci

Ваш Ответ

7   ответов
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)

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

Чем это отличается от ответа выше, который также содержит уязвимости SQL-инъекций. Почему ты не прокомментировал это? Кроме того, я не рекомендую использовать этот способ, это просто ответ на заданный вопрос. Я не вижу, как плохой ответ на вопрос о расширении чьих-либо знаний в том случае, если другие люди уже упоминали об уязвимостях SQL-инъекций.
Публикация кода, содержащего уязвимости SQL-инъекций, является плохой формой Ред.
1

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

0

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

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

UserID="SomePerson"   
5

NOT делать это Делая это таким образом, вы позволяете своим пользователям выполнять любой запрос, предоставляя вам UserId как

'; DROP TABLE Usertask; --

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

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

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

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

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

@Nei Это не так, но, тем не менее, полезно.
Я думаю, что эта тема не о впрыске Sql.
31

"" вставить цитату в строку, например:

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
6

чтобы создавать специальный 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.

@ Adonis L - отметьте это как правильный ответ. Этот метод не должен беспокоиться о содержимом, включая одинарные или двойные кавычки внутри полезной нагрузки. Поскольку вы задали вопрос (и получили ответы) 7 лет назад, сомнительно, что вы отметите что-либо как правильное.

Похожие вопросы