Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2015, 06:29   #1
АлМазСофт
Пользователь
 
Регистрация: 26.01.2010
Сообщений: 24
По умолчанию Вопрос к знатокам SQL

Имеется таблица Данные с полем Раздел, содержащее строки вида "!С!".
Надо заменить их на строки вида "С".
Использую запрос (простой или параметризированный) sql= string.Format("UPDATE Данные SET Данные.Раздел = '{0}' WHERE (Данные.Раздел='{1}')", @newRazdel, @Razdel);
Здесь Razdel- это !С!, а newRazdel - это С. С - это одиночный символ.
Все заменяется нормально, пока не встречается строка с Razdel = "!'!". Выдается окно с ошибками.

Снимок окна из облака почему-то не показывается. Там ошибка такая:
Лишняя скобка ) в выражении запроса '''' WHERE (Данные.Раздел='!'!')'.
Знатоки, подскажите, пожалуйста, как сделать эту замену. Может, в языке SQL есть неизвестные мне возможности для обработки таких строк?
А может нужно использовать какие-то другие способы?

Последний раз редактировалось АлМазСофт; 17.04.2015 в 06:37. Причина: Не показывается IMG
АлМазСофт вне форума Ответить с цитированием
Старый 17.04.2015, 06:48   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
WHERE (Данные.Раздел='!'!')'
Не очень смотрится...
Ты запросы параметризировать умеешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.04.2015, 07:02   #3
АлМазСофт
Пользователь
 
Регистрация: 26.01.2010
Сообщений: 24
По умолчанию

Использую запрос (простой или параметризированный)
Результат одинаков
АлМазСофт вне форума Ответить с цитированием
Старый 17.04.2015, 08:11   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Точно параметризированный используете? Код покажите. Конкатенация строк и String.Format это не параметризированный запрос.
http://en.wikipedia.org/wiki/Prepare...t#C.23_ADO.NET


Более того, так не стоит делать делать никогда, ибо злой-редиска пользователь может таким образом выполнить произвольный SQL код, это называется SQL инъекция.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 17.04.2015 в 08:17.
Alex11223 вне форума Ответить с цитированием
Старый 17.04.2015, 08:22   #5
АлМазСофт
Пользователь
 
Регистрация: 26.01.2010
Сообщений: 24
По умолчанию

Вот один из моих вариантов:
string sql = string.Format("UPDATE Данные SET Данные.Раздел = '{0}' WHERE (Данные.Раздел='{1}' AND Данные.Код={2})", @newRazdel , @Razdel, kod);
Код:
     // Параметризованная команда
                        cmd.CommandType = CommandType.Text;
                        cmd.CommandText = sql;
           cmd.Connection = cnn;
           OleDbParameter param = new OleDbParameter();
            param.ParameterName = "@Раздел";
            param.Value = @Razdel;
            param.OleDbType = OleDbType.VarChar;
            param.Direction = ParameterDirection.Input;
            cmd.Parameters.Add(param);

            param = new OleDbParameter();
            param.ParameterName = "@Раздел";
            param.Value = @newRazdel; ;
            param.OleDbType = OleDbType.VarChar;
            param.Direction = ParameterDirection.Output;
            cmd.Parameters.Add(param);

            param = new OleDbParameter();
            param.ParameterName = "@Код";
            param.Value = kod;
            param.OleDbType = OleDbType.Integer;
            param.Direction = ParameterDirection.Input;
            cmd.Parameters.Add(param);

            cmd.ExecuteNonQuery();

Последний раз редактировалось Stilet; 17.04.2015 в 09:37.
АлМазСофт вне форума Ответить с цитированием
Старый 17.04.2015, 08:25   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну вот и я говорю
Цитата:
String.Format это не параметризированный запрос.
и с параметрами дальше вы что-то странное делаете, вы ж имя уже записали в команду своим Стринг.Форматом.

Смотрите пример по ссылке выше.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 17.04.2015, 09:39   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
param.Value = @Razdel;
А че @ действительно нужна?? О_о
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.04.2015, 09:55   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Неа, он просто путает @ в самой строке с параметрами запроса и @ перед именем переменной.
Второе это для использования зарезервированных слов в качестве имени переменной
Код:
string @string = "a";
Console.WriteLine(@string);
и тут не несет никакого смысла.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 17.04.2015, 10:05   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А я думал собачка только перед константной строкой ставится...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.04.2015, 10:21   #10
АлМазСофт
Пользователь
 
Регистрация: 26.01.2010
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Не очень смотрится...
Ты запросы параметризировать умеешь?
Вопрос решился настоящим параметризированным запросом!
Оказывается, я не то имел в виду под параметризированным запросом
Всем спасибо за участие.
АлМазСофт вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос к знатокам:) Kevin K Свободное общение 2 05.07.2013 23:02
Вопрос знатокам) Fireprophet PHP 1 16.05.2011 21:16
Вопрос к знатокам mishapts Мультимедиа в Delphi 5 27.03.2011 23:05
вопрос знатокам Exo Microsoft Office Excel 1 29.01.2008 17:01
вопрос к знатокам Taras Общие вопросы Delphi 1 28.11.2006 14:46