2010-07-15 1 views
0

(Это классический ASP) Я уверен, что это всего лишь случай выхода из текста, но я еще ничего не нашел. У меня есть текстовое поле, которое может содержать всевозможные символы, и мне нужно ОБНОВИТЬ запись с тем, что находится в этом текстовом поле, но я получаю сообщение об ошибке, которое разбивает мой SQL-запрос, и я уверен, что это связано с содержанием текстовое поле.Как помещать данные textarea в базу данных SQL Server?

Так что у меня это до сих пор, как мой SQL запрос:

"UPDATE document SET displayheading='" & _ 
    stripillegal(request("txt_displayheading")) & _ 
    "', displayorder=" & displayorder & _ 
    ", shortdescription='" & stripillegal(request("txt_shortdescription")) & _ 
    "', document_note='" & request("document_note") ...blah blah blah 

Так мне интересно, как я могу содержать текстовое поле, так что я могу обновить запись, не разрушая запрос?

+1

Что ошибка вы получаете? –

+3

BTW: У вас есть уязвимость SQL Injection в этом коде. – JohnFx

+2

Рассмотрите возможность использования подготовленных операторов SQL или хранимых процедур с параметрами, а затем используя средство доступа к данным (например, ADO) для обработки передаваемых значений параметров, и вы получите бесплатную функцию «stripillegal», «FormatDateText» и т. Д. – onedaywhen

ответ

1

Вот способ, чтобы избежать динамического SQL и адресуйте потенциал инъекции SQL. Он использует параметризованный запрос. Вот SQL решение:

DECLARE @DisplayHeading varchar(100) 
    DECLARE @DisplayOrder int 
    DECLARE @ShortDescription varchar(100) 
    DECLARE @DocumentNote varchar(100) 

    DECLARE @command nvarchar(500) 
    DECLARE @params nvarchar(500) 

    SET @command = N'UPDATE document 
     SET [email protected] 
     , [email protected] 
     , [email protected] 
     , [email protected] 
     --...blah blah blah' 

    SET @params = N'@DisplayHeading varchar(100), @DisplayOrder int, 
      @ShortDescription varchar(100), @DocumentNote varchar(100)' 

-- Assign values to user variables. 

EXEC sp_executesql @command, @params, @DisplayHeading, 
    @DisplayOrder, @ShortDescription, @DocumentNote 


А вот что вы можете попробовать с помощью ADO:

cmd.CommandText = "UPDATE document " & _ 
     "SET [email protected], [email protected], " & _ 
     "[email protected], [email protected] " & _ 
     "--...blah blah blah" 

    cmd.Parameters.Add(New SqlParameter("@DisplayHeading", DisplayHeading)) 
    cmd.Parameters.Add(New SqlParameter("@DisplayOrder", DisplayOrder)) 
    cmd.Parameters.Add(New SqlParameter("@ShortDescription", ShortDescription)) 
    cmd.Parameters.Add(New SqlParameter("@DocumentNote", DocumentNote)) 
1

Запрос сломается, если есть символ, как ', вам нужно сначала заменить их:

newStr = Replace("'", "''", request("txt_displayheading")) 

И в запросе использовать переменную newStr вместо request("txt_displayheading"

+0

Нужна дополнительная информация) в конце –

+0

Вы не хотите, чтобы убрать их. Представьте, что если stackoverflow сделал это, слово «do not» в этом комментарии попало бы в базу данных как «dont». Вы просто хотите заменить одну цитату двумя одинарными кавычками. –

+0

не удаляйте '' ', как они могут быть захотели .. измените их на' '' 'и они будут сохранены правильно. –