The Praveen Singh Ответов: 2

Добавить строку после определенного текста


У меня есть предложение Where типа
"copkshopno in ('5') and"

Я хочу добавить еще один фильтр в мое предложение where с таким же параметром, как
"copkshopno in ('5,6,7,8') and"



Как вы видите, я приложил 6,7,8, как я могу этого достичь.

Что я уже пробовал:

строка A = (ctrlParam as DNTextBox).ConnectedField + " in ('"; / / это используется, потому что я хочу добавить текст после этого текста.
whereCondition += whereCondition.IndexOf (A) + string.Join (",", selectItems)+") и ";

2 Ответов

Рейтинг:
5

Maciej Los

Примечание: это не точный ответ, но...

Я хочу предупредить вас о SQL-инъекция[^]
Как: защита от SQL-инъекций в ASP.NET[^]
Соображения Безопасности (Entity Framework)[^]
Защита Сервера Баз Данных[^]

Вывод: Не объединяйте строку для построения SQL-команды! Вместо этого используйте параметризованные запросы!
Как выполнить параметризованный запрос[^]
Как выполнить параметризованный запрос Entity SQL с помощью EntityCommand[^]
Настройка параметров и типов данных параметров[^]


Karthik_Mahalingam

5! для изюминки :)
поставив этот ответ в закладки, я буду ссылаться на него для будущих вопросов, связанных с SQL-инъекцией :)

Maciej Los

Спасибо, Картик.

Рейтинг:
15

Karthik_Mahalingam

использовать Строка.Формат[^], что упростит конкатенацию строк.

int[] items = new int[] { 1,2,3,4};
      string whereIn = string.Format(" in('{0}') and",string.Join(",",items));
      whereCondition += whereIn;


Форматирование строки sql-запроса уязвимый к SQL-инъекция[^] атаки
всегда использовать Параметризованные запросы для предотвращения атак SQL-инъекций в SQL Server[^]


Maciej Los

Картик, я бы не рекомендовал использовать конкатенацию строк с SQL. ОП должен пройти whereIn переменная как параметр в команде, вместо того чтобы объединять ее с whereCondition в одну строку (команду).

Karthik_Mahalingam

Да Мацей
обновил решение.
Я только что ответил на контекст.

Maciej Los

5ед!
Пожалуйста, посмотрите мой ответ ;)

Karthik_Mahalingam

Спасибо Мацей

The Praveen Singh

@Karthik на самом деле ты не понимаешь, о чем именно я хочу спросить:-
whereCondition + = (ctrlParam as DNTextBox).ConnectedField + " in ('" + string.Присоединяйтесь к("','", (ctrlParam как DNTextBox).Текст.Заменить(",", "','")) + "') и ";
Выше синтаксис возвращает "copkshopno in ('5') и"
Снова через цикл next param приходит Shopgroup, в котором было найдено несколько магазинов, которые я хочу добавить в свое wherecondition в запросе для coshopno.

Karthik_Mahalingam

опубликуйте весь код цикла.

The Praveen Singh

пнл.контроль.CopyTo(arrCtrl, 0);
string whereCondition = строка.Пустой;
строка SelectedValue = "";
//bool selectShop = false;
Список<контроль> Список = новый список<контроль&ГТ;(arrCtrl);
foreach (HtmlControl genParam в списке.FindAll(p => { return (p - HtmlGenericControl); }))
{
if ((ctrlParam as DNTextBox).Вводимый.ToLower () = = " tashop")
{
whereCondition + = (ctrlParam as DNTextBox).ConnectedField + " in ('" + string.Присоединяйтесь к("','", (ctrlParam как DNTextBox).Текст.Заменить(",", "','")) + "') и ";
}
if ((ctrlParam as DNTextBox).Вводимый.ToLower () = = " tashopgroups")
{
строки selectItems = параметры.getShopGroup(строка.Join ("','", (ctrlParam as DNTextBox). Text));
// Select items возвращает shop no на основе группы магазинов, которую я хочу добавить
если (selectItems == "")
{
строковое значение = XYX.Графический интерфейс.Многоязыковой.DNMultiLanguage.Метод GetMessage("noshopfound");
строки sccript = "<сценарий и GT;alertify.предупреждение (" + значение + "');</скрипт&ГТ;";
Страница.ClientScript.RegisterStartupScript(GetType (), "ключ", sccript);
вернуть;
}
}

}

Karthik_Mahalingam

что это содержит
(ctrlParam как DNTextBox). Text

The Praveen Singh

это содержит значение Textbox.

The Praveen Singh

if (whereCondition.Содержит ((ctrlParam as DNTextBox).ConnectedField))
{
// здесь я хочу извиниться.
}

Karthik_Mahalingam

добавить между ними?

The Praveen Singh

да

The Praveen Singh

// здесь ConnectedField возвращает имена параметров.

Karthik_Mahalingam

как запятая отделяется?

The Praveen Singh

да

Karthik_Mahalingam

попробуйте просто так в петлю
string columnName = (ctrlParam as DNTextBox).ConnectedField;
string text = ctrlParam as DNTextBox). Text; / / csv , столбец nvarchar в БД
var values = text. Split (',');
whereCondition += string.Format ("{0} in ('{1}')", columnName, string.Присоединяйтесь к("','", ценности));

The Praveen Singh

это вернется так же, как это copkshopno in ('5') и copkshopno in ('1','2','3','4')

который не дает ожидаемого результата из-за оператора AND.

The Praveen Singh

и я не могу использовать здесь оператор OR из-за зависимости от других параметров.

The Praveen Singh

перед вторым параметром пришло значение, похожее на copkshopno in ('5'), и я хочу добавить строковое значение='1,2,3' В оператор in после 5.

Karthik_Mahalingam

сначала сохраните все значения в переменной из цикла, а затем используйте приведенный выше код..

The Praveen Singh

знаете, я хранить все значения в переменной после этого я использовал ваш код вернет такой copkshopno в ('5') и copkshopno в ('1','2','3','4')

Karthik_Mahalingam

List & lt;string & gt; Items = новый список & lt;string> ();
инструкция foreach (.......)
{
string text = ctrlParam as DNTextBox). Text; / / csv , столбец nvarchar в БД
Предметы.Добавить текст);
}

whereCondition += string.Format ("{0} in ('{1}')", columnName, string.Присоединяйтесь К("','", Пользования));

The Praveen Singh

как получить только 5,6,7 от " копкшопно в ('5,6,7') и"