Hafiz Ishtiaq Ответов: 3

Как вставить специальный символ в SQL datbase через веб-сервис


[OperationContract]
       [WebInvoke( Method="*",UriTemplate = "/insert/{src}/{input}/" ,RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
       string insert(string src,string input);


Что я уже пробовал:

con.Open();
string q = "insert into log(@code,@input) values ('" + src.ToString()+ "','" + input.ToString() + "')";
                SqlCommand cmd = new SqlCommand(q,con);
                cmd.ExecuteNonQuery();

Afzaal Ahmad Zeeshan

В чем проблема, не могли бы вы быть более конкретными? Хранятся ли эти данные или их нет вообще?

3 Ответов

Рейтинг:
2

Christiaan van Bergen

С помощью параметров вы сможете вставлять специальные символы. Например:

private void InsertMethod(string code, string input)
{
  using (var conn = new SqlConnection(ConnectionString))
  {
    con.Open();
    var myQuery = "insert into [log] ([code],[input]) values (@code, @input)";
    var paramCode = new SqlParameter("@code", SqlDbType.NVarChar) {Value = code};
    var paramInput = new SqlParameter("@input", SqlDbType.NVarChar) {Value = input};     
    using (var cmd = new SqlCommand(myQuery conn))
    {
      cmd.Parameters.Add(paramCode);
      cmd.Parameters.Add(paramInput);

      cmd.ExecuteNonQuery()
    }
  }
}
В этом примере я использую SqlDbType.NVarChar. Вы можете использовать целую серию типов, которые, конечно же, должны соответствовать вашей структуре таблицы.


Рейтинг:
1

Wendelius

Проблема с вашим запросом заключается в том, что вы связываете значения с инструкцией SQL. Это оставляет вас открытыми для SQL-инъекций и вводит, например, проблемы преобразования.

Правильный способ сделать это-использовать Класс Объектов Sqlparameter (Системы.Данных.Поставщики sqlclient)[^]

Кроме того, вы не указываете знак @ для имен столбцов, если они действительно не содержат его. Синтаксис таков

INSERT INTO (ColumnName, ColumnName, ...) VALUES (@ParameterName, @ParameterName, ...)

Для получения более подробной информации взгляните на Правильное выполнение операций с базой данных[^]


Рейтинг:
0

Patrice T

string q = "insert into log(@code,@input) values ('" + src.ToString()+ "','" + input.ToString() + "')";

возможно, это решение вашего вопроса.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]