Member 14766822 Ответов: 1

Добавление '% в команду SQL


У меня есть SQL-запрос, который я хочу бросить мои asp.net (форм) проект запроса:

SELECT COUNT([order]) FROM menu_orders_Finished
WHERE [order] LIKE '%EXAMPLE%' 


То, что я пытаюсь сделать, это

con.Close();
            con.Open();
            cmd = new SqlCommand("select * from menu",con);
            SqlDataReader dr;
            dr = cmd.ExecuteReader();
            Series series = Chart2.Series["Series2"];
            while (dr.Read())
            {
                search = new SqlCommand("SELECT COUNT([order]) FROM menu_orders_Finished WHERE [order] LIKE '%@order@%'", con)
                search.Parameters.AddWithValue("@order", dr["name"].ToString());
                int count = Convert.ToInt32(search.ExecuteScalar());
                Label3.Visible = true;
                Label3.Text += count.ToString() + "+";
            }
            con.Close();

Это в основном подсчет того, сколько раз у меня есть заказ с одним из пунктов меню в заказе (я хочу сделать диаграмму самого продаваемого блюда)

А затем добавляю его в диаграмму (но я отключаю его только для того, чтобы посмотреть, что я получу в первую очередь)

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

search = new SqlCommand("SELECT COUNT([order]) FROM menu_orders_Finished WHERE [order] LIKE '%@order@%'", con)
               search.Parameters.AddWithValue("@order", dr["name"].ToString());
               int count = Convert.ToInt32(search.ExecuteScalar());

1 Ответов

Рейтинг:
1

Richard Deeming

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

Любой:

search = new SqlCommand("SELECT COUNT([order]) FROM menu_orders_Finished WHERE [order] LIKE @order", con);
search.Parameters.AddWithValue("@order", "%" + dr["name"] + "%");
или:
search = new SqlCommand("SELECT COUNT([order]) FROM menu_orders_Finished WHERE [order] LIKE '%' + @order + '%'", con);
NB: Вы пытаетесь выполнить несколько команд на одном и том же соединении одновременно. Вам нужно будет иметь "несколько активных результирующих наборов" указан параметр строки подключения, в противном случае вы получите "активный datareader" ошибка.

Вероятно, вы можете сделать это с помощью одного запроса:
SELECT (SELECT COUNT(1) FROM menu_orders_Finished As O WHERE O.[order] LIKE '%' + M.name + '%') As N FROM menu As M


Member 14766822

Пробовал, но ничего не вышло.

Richard Deeming

"Не работать" это не очень полезное описание. Предоставьте правильное описание проблемы.

Member 14766822

Он не показывает тех данных, которые я ищу.

Richard Deeming

Тогда вы должны исправить это так, чтобы это произошло.

Серьезно, как вы ожидаете, что кто-то поможет вам, основываясь на этом описании?!

Помните, мы не можем видеть ваш экран. Мы не можем получить доступ к вашему компьютеру. Мы не можем читать твои мысли. Все, что нам нужно, - это то, что вы набираете в этой маленькой коробке прямо здесь.

Member 14766822

Я не понимаю, почему тебе так неприятно помогать мне, Ты же не обязан.
Все , что я хочу сказать , это то, что код, который вы прикрепили, не работает, и каждый код не работает, поэтому я думаю, что это логическая ошибка с моей стороны.

Я видел , что существуют различные методы в зависимости от типа данных, который в моем случае является nvarchar , то , что я пытаюсь сделать , это цикл, чтобы начать с "menu_orders_finished" (то есть заказы, которые веб-сайт закончил с ними) и счетчик для подсчета каждый раз, когда я получаю совпадение из таблицы "меню", которая является всеми пунктами меню, чтобы я мог показать их на диаграмме.
Теперь, когда я об этом думаю. мне нужны две петли , верно?
Один , чтобы пройти через каждый заказ с первым названием меню , и следующий пункт, и следующий, каждый раз, чтобы зациклить весь "menu_orders_finished" и подсчитать совпадения.

Richard Deeming

Размещение "не работать" и - не показываю то, что хочу" как описание проблемы и ожидание, что кто-то сможет вам помочь, не будет работать. Вы должны предоставить полное описание того, в чем проблема, что вы пробовали, и где вы застряли.

Я не вижу ваших данных. Я не знаю, чего ты пытаешься добиться. Основываясь на коде, который вы предоставили в своем вопросе, любой набор кода из моего решения будет работать.

Но, судя по Вашим комментариям, это так. не работать потому что это так не показывая того, что вы ожидаете Так что вам нужно это исправить.

Member 14766822

Я все исправил.
Спасибо :)

Member 14766822

Для тех , кто здесь попал в беду, моя проблема заключалась в том, что в моей таблице "меню" было много пробелов из-за типа данных, большего, чем ему нужно.
Я изменил его на nvarchar(10) и избавился от пробелов, и теперь он работает нормально.
Например, "%EXAMPLE% "может работать только так , а не %" ssx%", как у меня раньше.