Как экранировать символы в запросе MS SQL Server?

589
10 июня 2017, 12:26

Имеется программа на С#, работающая с MS SQL Server:

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    SqlCommand command = new SqlCommand("SELECT * FROM Tests where Name='" + oldValue + "'", connection);
    SqlDataReader read = command.ExecuteReader();
    if (read.HasRows)
    {
        while (read.Read())
        {
            int s = Convert.ToInt32(read.GetString(0));
            command = new SqlCommand("update Tests set Name='" + oldValue + "' where Id = " + read.GetString(0), connection);
            command.ExecuteNonQuery();
        }
    } 
 }

Так вот, проблема в том, что, если в ячейке таблицы имеется строковое значение, включающее скобки (в моём случае), то результатом SELECT'а является пустой запрос. Судя по всему, скобки - это какой-то спецсимвол. Это, естественно, не даёт сделать то, что мне надо.

Вопрос: нет ли какой-то функции или способа экранирования спецсимволов в запросе? В поисковиках не смог найти ничего внятного.

Answer 1

Мне непонятна логика Ваших SQL запросов, но будем считать, что это погрешности переноса кода из проекта в SO.

Используйте параметризованные запросы и горя не знайте:

SqlCommand cmdSelect = new SqlCommand("SELECT * FROM Tests where Name=@Name", connection);
cmdSelect.Parameters.AddWithValue("@Name", oldValue);
using(SqlDataReader reader = cmdSelect.ExecuteReader())
{
  while (reader.Read())
  {
    SqlCommand cmdUpdate = new SqlCommand("update Tests set Name=@Name where Id = @Id", connection);
    cmdUpdate.Parameters.AddWithValue("@Name", oldValue);
    cmdUpdate.Parameters.AddWithValue("@Id", reader.GetString(0));
    cmdUpdate.ExecuteNonQuery();
  }
}

NB: Последний раз, когда я это проверял, SqlConnection с открытым ридером нельзя было использовать для других операций.

READ ALSO
C# word поиск и вывод меток

C# word поиск и вывод меток

Добрый деньУ меня есть документ Doc

348
Не привязываются данные к модели

Не привязываются данные к модели

Когда данные приходят на WebApi контроллер, модель приходит, но в ней все строки nullРаспознаются только enumы

265
unrecognized database format в приложении C# Windows Form Application

unrecognized database format в приложении C# Windows Form Application

Добрый день, попросили создать простенькое приложение для учета техники, приложение я сделал, сперва создал в Access 2010 БД с таблицей и нужными...

285
C# Оператор “return _();”

C# Оператор “return _();”

ЗдравствуйтеТребуется включить в проект Visual Studion 2015 Community исходный код из проекта MoreLinq

376