Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Валидирунг SQL-строк, Можно ли 
:(
    Опции темы
ivashkanet
Дата 11.10.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(Дрон @  11.10.2006,  14:20 Найти цитируемый пост)
- нужно попытаться создать хранимую процедуру, содержащую предполагаемый запрос: при создании хранимой процедуры сервер проверит валидность её содержимого

А не накладно это будет? Ведь такие процедуры будут создаваться часто  smile 
PM MAIL WWW ICQ   Вверх
Дрон
Дата 11.10.2006, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



ivashkanet, дык-ть как я понял проверка синтаксиса нужна не перед выполнением: непосредственно перед выполнением она вообще бессмысленна, т.к. все ошибки будут выявлены сразу.

Проверка нужна один раз -- в момент ввода запроса пользователем, чтобы сразу же сказать, что он туда какую-то ерунду ввёл.

Это сообщение отредактировал(а) Дрон - 11.10.2006, 14:31


--------------------
Да. Именно так.
PM   Вверх
Pankon
Дата 11.10.2006, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 739
Регистрация: 2.6.2005

Репутация: 3
Всего: 5



Цитата(Дрон @  11.10.2006,  14:20 Найти цитируемый пост)
Кстати, а почему тема не в разделе про базы данных?
 Программирование-то под дот.нет...., где во FrameWork столько (без)дельных классов... Namespace System.Data например....

Цитата(Дрон @  11.10.2006,  14:20 Найти цитируемый пост)
попытаться создать хранимую процедуру
 а как? (имеется ввиду средствами дот.нет)

Добавлено @ 14:31 
Цитата(Дрон @  11.10.2006,  14:30 Найти цитируемый пост)
в момент ввода запроса пользователем
 ага

PM MAIL   Вверх
Дрон
Дата 11.10.2006, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



Цитата(Pankon @  11.10.2006,  15:30 Найти цитируемый пост)
Программирование-то под дот.нет...., где во FrameWork столько (без)дельных классов... Namespace System.Data например....

Но ведь вопрос про базы данных, а не про .net в частности.

Цитата(Pankon @  11.10.2006,  15:30 Найти цитируемый пост)
а как? (имеется ввиду средствами дот.нет)

А какая у тебя БД?
И что значит средствами .NET? Работа с базой всегда идёт через SQL smile

Для MSSQL Server я бы сделал так:
Код

            string sqlToVerify = "DROP DATABASE master"; // будем проверять не выполняя (и не вздумай выполнять!!!) 

            using (SqlConnection conn = new SqlConnection("server=localhost;integrated security=SSPI"))
            {
                conn.Open();

                string spName = "SP_" + Guid.NewGuid().ToString("N"); // уникальное имя

                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                try
                {
                    // попытаемся создать хр.пр.
                    cmd.CommandText = string.Format("CREATE PROCEDURE {0} AS {1};", spName, sqlToVerify);
                    cmd.ExecuteNonQuery();
                    
                    // если она нормально создалась, то надо её сразу и грохнуть :)
                    cmd.CommandText = string.Format("DROP PROCEDURE {0}", spName);
                    cmd.ExecuteNonQuery();
                }
                catch(SqlException ex)
                {
                    // значит синтаксис неверен 
                    MessageBox.Show(ex.Message);
                }
            }




Это сообщение отредактировал(а) Дрон - 11.10.2006, 14:46


--------------------
Да. Именно так.
PM   Вверх
sergejzr
Дата 11.10.2006, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Ну и для мускула smile 

Код

string sqlToVerify = "DROP DATABASE master"; // будем проверять не выполняя (и не вздумай выполнять!!!) 
            using (SqlConnection conn = new SqlConnection("server=localhost;user=root;password=0123456"))
            {
                conn.Open();
                string spName = "SP_" + Guid.NewGuid().ToString("N"); // уникальное имя
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                try
                {
                    // попытаемся создать хр.пр.
                    cmd.CommandText = string.Format("EXPLAIN {0};",  sqlToVerify);
                    cmd.ExecuteNonQuery();
                }
                catch(SqlException ex)
                {
                    // значит синтаксис неверен 
                    MessageBox.Show(ex.Message);
                }
            }



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Дрон
Дата 11.10.2006, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



sergejzr, да, у них ещё проще -- только там будет не SqlConnection/SqlCommand, а свои классы с префиксом MySql smile

Для Oracle, кстати, тоже есть нечто подобное, только там чуть посложнее будет: просишь сервер посчитать план выполнения, и проверяешь посчитался ли он.


--------------------
Да. Именно так.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0494 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.