Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > обработка URL


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

Автор: archimed7592 19.4.2007, 02:42
http://msdn2.microsoft.com/en-us/library/system.web.httputility.urlencode.aspx
smile

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

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

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


SQLStatement= "Slelect * From "+SomeStringFromElseWhere;

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

Автор: Mymik 20.4.2007, 23:38
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;

Автор: Vit 21.4.2007, 00:32
Ты так и не понял  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;


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

Автор: 6atoh 21.4.2007, 11:48
По-моему имя таблицы нельзя передавать параметром SQL-запроса smile 

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


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

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

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

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

Автор: Exception 21.4.2007, 17:04
Vit, извини за нудность, но ты точно уверен, что без использования чистого SQL не обойтись? В среде дотнетчиков не слишком-то принято им пользоваться.

Автор: Vit 21.4.2007, 17:33
Цитата(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 стало бы неактуальным или ненужным...


Автор: Exception 21.4.2007, 18:33
Код
/// <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;
}


http://www.thescripts.com/forum/thread264106.html.

Автор: Vit 21.4.2007, 18:55
Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)