2015-09-14 3 views
0

У меня возникла проблема ввода одной кавычки в sql-запросе. Запрос ниже.Вывод запроса одиночной кавычки

Dim query As String = "insert into users(comment) values ('" & txt_comment.Text & "')" 

Он отлично работает. Однако, когда пользователь вводит единичные данные кода в текстовое поле, запрос выходит из строя. Введите пример, например, «henry's». Кто-нибудь хотел бы предложить мне, что мне делать? Заранее спасибо

+3

использования параметризованных запросов. Это также предотвращает проблемы с SQL-инъекциями. –

+0

SQL ожидает, что все кавычки будут закрыты, что не происходит в вашем примере. Просто убедитесь, что все ваши запросы построены точно так, как ожидалось, независимо от пользовательских входов. Кстати, этот конкретный код очень удобен для SQL-инъекций: вы всегда должны проверять запрос перед подключением к серверу (параметризованные запросы, как это было предложено Мэттом, позаботятся об этом автоматически). – varocarbas

+3

Кто-нибудь сказал «Маленькие столы Бобби»? –

ответ

-4

Вы должны дублировать кавычки:

Dim query As String = "insert into users(comment) values ('" & txt_comment.Text.replace("'","''") & "')" 
+0

спасибо @ emoreau99 проблема решена. –

+0

Это ужасное решение, открытое для проблем безопасности в sql. –

+0

Я полностью согласен с тем, что параметризованные запросы лучше. – emoreau99

6

USE PARAMETERISED QUERIES!!

Извините кричать, но я не могу не подчеркнуть, насколько это важно. Пример, который вы дали "Henry's", на самом деле является ручным примером и просто вызовет запрос. Кто-то может ввести "Henry'; DROP TABLE users;--", и теперь вы потеряли таблицу своих пользователей.

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

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

Dim query As String = "insert into users(comment) values (@Comment);" 

Using connection As New SqlConnection("Your Connection String") 
    Using command As New SqlCommand(query, connection) 

     command.Parameters.Add("@Comment", SqlDbType.VarChar, 255).Value = txt_comment.Text 
     command.ExecuteNonQuery() 
    End Using 
End Using 
Смежные вопросы