Подтвердить что ты не робот

Исключение кавычек в строке в VB6

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

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

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

4b9b3361

Ответ 1

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

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

Что дает вам

Привет, Фрэнк, как дела?

Ответ 2

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

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

Ответ 3

Я бы рекомендовал вам использовать параметризованный SQL вместо того, чтобы создавать SQL-запрос adhoc, как это, поскольку вы могли бы оставить себя открытым для 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.

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

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

Ответ 5

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

'; DROP TABLE Usertask; --

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


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

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

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

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

Ответ 6

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

Ответ 7

вот так..

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

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

UserID="SomePerson"