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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обработка URL 
V
    Опции темы
Vit
Дата 19.4.2007, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Есть строка типа "38 попугаев", её надо передать как параметер, есть ли функция которая формирует из неё "38%20попугаев"? 



--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
archimed7592
Дата 19.4.2007, 02:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

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





--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Vit
Дата 20.4.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



А есть ли функция, которая подготавливает строку для того чтобы её использовать, скажем в SQL - заменяет кавычки на пары кавычек и вообще заключает строку в кавычки?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Mymik
Дата 20.4.2007, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 50
Всего: 78



Vit, Если ты используешь хранимые процедуры то тебе не о чем беспокоиться. У них высокая степень защиты. Т.е. принимаемый типа (к примеру nvarchar) он и будет обрабатываться как этот тип данных (грубо говоря он и будет находиться в строке). Ну а дополнительно используется статические методы из класс HttpUtility. 


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
Vit
Дата 20.4.2007, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Не всегда можно обойтись SP, точнее иногда можно но будет очень громоздко, а надо код SQL генерировать на лету, типичный пример, типа:


SQLStatement= "Slelect * From "+SomeStringFromElseWhere;

Конечно я могу это всё вынести в SP, и в самой SP средствами T-SQL делать проверки и конвертацию, а потом делать динамический SQL и запускать при помощи Exec, но это лишний геморрой... Из серии могу но не хочу... Даже многократно делал, но тогда я писал программы на чистом T-SQL без какого-либо фронт-энд и выхода не было, а если есть клиентская часть, то такое легче всего делается на клиенте. В дельфи для этого была часто применяемая функция QuotedStr... Я не верю что в C# нет аналогичной, по моему сейчас вообще трудно найти язык програмирования в которой бы её не было...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Mymik
Дата 20.4.2007, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 50
Всего: 78



Vit, Ну тогда просто используй Все теже параметры.
Код

        /* Создаем шаблон SQL запроса */
        string sql = "SELECT * ";
        sql += "FROM table1 ";
        sql += "WHERE a = @dbParam1 ";
        sql += "AND b = @dbParam2 AND c = @dbParam3";

        SqlCommand sqlCmd = new SqlCommand();

        /* Передаем параметры в наш Запрос */
        sqlCmd.Parameters.Add(new SqlParameter("@dbParam1", dbParam1));
        sqlCmd.Parameters.Add(new SqlParameter("@dbParam2", dbParam2));
        sqlCmd.Parameters.Add(new SqlParameter("@dbParam3", dbParam3));

        /* Присваиваем текст запроса */
        sqlCmd.CommandText = sql;

        /* Назначаем тип запроса */
        sqlCmd.CommandType = CommandType.Text;


Добавлено через 7 минут и 7 секунд
либо еще можно вот так вот добавлять параметры (чтобы не ошибиться в типе) -->>
Код

sqlCmd.Parameters.Add("@dbParam1", SqlDbType.NVarChar, 50).Value = dbParam1;



--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
Vit
Дата 21.4.2007, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Ты так и не понял  smile 

Параметры в моём случае работать не будут:

Код

        /* Создаем шаблон SQL запроса */
        string sql = "SELECT * ";
        sql += "FROM  @dbParam1";

        SqlCommand sqlCmd = new SqlCommand();

        /* Передаем параметры в наш Запрос */
        sqlCmd.Parameters.Add(new SqlParameter("@dbParam1", dbParam1));

        /* Присваиваем текст запроса */
        sqlCmd.CommandText = sql;

        /* Назначаем тип запроса */
        sqlCmd.CommandType = CommandType.Text;


можешь проверить и убедиться, что параметром ты тут ничего не передашь


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
6atoh
Дата 21.4.2007, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 1
Всего: 4



По-моему имя таблицы нельзя передавать параметром SQL-запроса smile 
PM MAIL ICQ   Вверх
Vit
Дата 21.4.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Цитата(6atoh @  21.4.2007,  02:48 Найти цитируемый пост)
По-моему имя таблицы нельзя передавать параметром SQL-запроса 


Угу, как и имена любых объектов SQL, а потому и мой вопрос поставлен...



--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
6atoh
Дата 21.4.2007, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 1
Всего: 4



Цитата(Vit @  20.4.2007,  22:02 Найти цитируемый пост)
В дельфи для этого была часто применяемая функция QuotedStr... 

Неужели такую функцию трудно самому написать
Код

        public static string QuotedStr(string s)
        {
            string quotedString;
            quotedString = s.Replace("\'", "\'\'");
            quotedString = "\'" + quotedString + "\'";
            return quotedString;
        }

PM MAIL ICQ   Вверх
Exception
Дата 21.4.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 9
Всего: 186



Vit, извини за нудность, но ты точно уверен, что без использования чистого SQL не обойтись? В среде дотнетчиков не слишком-то принято им пользоваться.
PM   Вверх
Vit
Дата 21.4.2007, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Цитата(6atoh @  21.4.2007,  07:45 Найти цитируемый пост)
Неужели такую функцию трудно самому написать


Нет, не трудно, но не люблю изобретать велосипед, такие рутинные функции по идее должны быть реализованы, во всяком случае все языки с которыми я работал такую функцию имели.



Цитата(Exception @  21.4.2007,  08:04 Найти цитируемый пост)
Vit, извини за нудность, но ты точно уверен, что без использования чистого SQL не обойтись? В среде дотнетчиков не слишком-то принято им пользоваться. 


Простейшая задача:

Допустим есть база данных:
- клиенты, заказы, и т.п.

Требуется сделать экспорт данных из таблиц в соотвествии с условиями, заданными клиентом. Заранее структура данных выходных и критерии выбора не известны. Интерфейс предоставляемый программой есть по сути есть Query Builder и позволяет клиенту в визуальной форме делать любые join и/или Union по любым полям любых доступных ему таблиц, назначать условия выбора, сортировки и группировки по любым полям, в том числе и с применением выражений, наприемер пользователь может сказать что надо отобрать только тех пользователей у которых последние пять цифр номера лицензии делятся без остатка на 7 (внутреняя контрольная сумма) и т.п. Задача почти не формализуема, так как количество вариантов которые можно придумать исчисляется факториалом нескольких сотен...

Я такую задачу реализовывал на T-SQL, это довольно трудоёмкая но возможная работа, пришлось писать хранимки по десятку тысяч строк, в общем-то в основном из-за неприспособленности T-SQL для обычного програмирования. На языках общего назначения типа C, Дельфи и т.п. эти вещи реализуются значительно проще. 

А по поводу принято или нет - у меня за спиной почти 2 десятка лет опыта програмирования, и то что я пока не знаю .net - это не означает что я не знаю чего я хочу добиться и не представляю как этого можно добиться. Кроме того я не вижу таких принципиальных отличий .net от Win32 платформы которые бы указывали на то что с переходом на .net создание динамического SQL стало бы неактуальным или ненужным...




--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Exception
Дата 21.4.2007, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 9
Всего: 186



Код
/// <summary>
/// Formats a database value into a string format suitable for query operations.
/// For example, strings are quoted.
/// </summary>
/// <param name="columnValue">The value to be used in a SQL statement.</param>
/// <returns>A string representation of that value.</returns>
public static string ValueToSQLString(object columnValue)
{
    switch (Type.GetTypeCode(columnValue.GetType()))
    {
        case TypeCode.String:
        return "'" + EscapeText(columnValue.ToString()) + "'";
        default:
        return EscapeText(columnValue.ToString());
    }
}

/// <summary>
/// Escapes the given text so that it can appear within single quotes in a
/// SQL statement.
/// </summary>
/// <param name="textToEscape">The string to escape.</param>
/// <returns>The escaped string, ready to be included in a
/// SQL statement.</returns>
public static string EscapeText(string textToEscape)
{
    string backslashesEscaped = textToEscape.Replace(@"\", @"\\");
    string backslashAndSingleQuoteEscaped = backslashesEscaped.Replace(@"'", @"\'");
    return backslashAndSingleQuoteEscaped;
}


Отсюда.

Это сообщение отредактировал(а) Exception - 21.4.2007, 18:34
PM   Вверх
Vit
Дата 21.4.2007, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Спасибо!


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

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

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


 




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


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

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