Имеется программа на С#, работающая с 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'а является пустой запрос. Судя по всему, скобки - это какой-то спецсимвол. Это, естественно, не даёт сделать то, что мне надо.
Вопрос: нет ли какой-то функции или способа экранирования спецсимволов в запросе? В поисковиках не смог найти ничего внятного.
Мне непонятна логика Ваших 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 с открытым ридером нельзя было использовать для других операций.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости