Ответ 1
Вы можете использовать ""
для вставки цитаты в строку, например:
dim sometext as String = "Hello ""Frank"" how are you?"
Что дает вам
Привет, Фрэнк, как дела?
Я пытаюсь внести небольшие изменения в старое веб-приложение VB. Мне нужно добавить кавычки внутри строки, которой мне пока не повезло. Строка
Dim sql As String = "Select * from Usertask Where UserId = " & Session("UserId") & " and JobID=" & ddlReqTask.SelectedValue
Мне нужно добавить кавычки вокруг значения Session ( "UserID" ).
Вы можете использовать ""
для вставки цитаты в строку, например:
dim sometext as String = "Hello ""Frank"" how are you?"
Что дает вам
Привет, Фрэнк, как дела?
Чтобы избежать цитаты, вам просто нужно добавить еще одну цитату, я считаю, что это то, что вам нужно:
Dim sql As String = "Select * from Usertask Where UserId = """ & Session("UserId") & """ and JobID=" & ddlReqTask.SelectedValue
Я бы рекомендовал вам использовать параметризованный 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.
Вы также можете использовать 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
Это уязвимость SQL-инъекций, и вы должны НЕ делать это. Делая это таким образом, вы позволяете своим пользователям выполнять любой запрос, который они хотят, предоставляя вам UserId, например
'; 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-инъекций.
вот так..
dim user_id as string="SomePerson"
debug.print "UserId=" & chr(34) & user_id & Chr(34)
производит..
UserID="SomePerson"