stella bloom Ответов: 2

Я хочу выбрать вопросы из базы данных на основе пользовательского ввода C# SQL


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

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

<pre> private void IndexChanged(object sender, EventArgs e)
        
               
                {
           

        
       
        
            SqlConnection conn = new SqlConnection();
            string cmdText = "SELECT Top " + textB.Text + " * from Ques where Sub='" + combo.Text + "' ORDERBY newid()";
его просто сказать ошибка около 2 4 и т.д. значения я положил в текстовое поле, чтобы отобразить нет вопросов .. idk что происходит неправильно мой запрос или моя логика .. нужна помощь thanx

[no name]

Используйте правильный параметризованный запрос, и ваша проблема исчезнет сама собой.

stella bloom

я сделал это но это не так поэтому я вставил первый код подумал может быть это сработает но нет

stella bloom

я просто хочу, чтобы он отображал 10 вопросов физики, если я наберу 10 в текстовом поле.. скажите мне, что в этом плохого

[no name]

Что не так, так это то, что у вас есть синтаксическая ошибка в вашем SQL-запросе, это совершенно очевидно, это было бы решено с помощью параметризованного запроса. И ваш учитель r, по-видимому, не научил вас различать числа и строки.

[no name]

С какой ошибкой вы здесь столкнулись?

stella bloom

я просто говорю, что 0 строк присутствует, когда есть R строк, а затем индекс outa range, когда индекс полностью находится в диапазоне, но когда я удаляю текстовое поле, все работает гладко, когда я набираю значение, например, 4 5 и т. д. В текстовом поле он дает ошибку типа "error Ner value 3" и т. д.

F-ES Sitecore

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

2 Ответов

Рейтинг:
2

Patrice T

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.

string cmdText = "SELECT Top '" + textBox1.Text + "'Question,Opt1,Opt2,Opt3,Opt4 from Questions where SubName='" + comboBox1.Text + "' ORDERBY newid()";

Никогда не создавайте SQL-запрос путем конкатенации с пользовательскими вводами, он называется "SQL-инъекция", он опасен для вашей базы данных и подвержен ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользовательский ввод типа "Брайан О'Коннер" может привести к сбою вашего приложения, то это уязвимость SQL-инъекции.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]
Цитата:
его просто сказать ошибка около 2 4 и т.д. значения я положил в текстовое поле для отображения нет вопросов

Улучшите свой вопрос с содержанием оскорбления cmdText, так что мы можем знать, что такое настоящий запрос.


stella bloom

я уже говорил выше, что использовал параметризованную вещь

CHill60

Если вы использовали параметризованный запрос, то измените свой вопрос, чтобы показать код, который вы на самом деле использованный. Мы вряд ли сможем помочь вам найти проблему, если не знаем, как выглядит код!

Patrice T

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

CHill60

На самом деле я думаю, что это решило бы проблему

Рейтинг:
1

CHill60

Поставьте точку останова на линии

string cmdText = "SELECT Top '" + textBox1.Text + "'Question,Opt1,Opt2,Opt3,Opt4 from Questions where SubName='" + comboBox1.Text + "' ORDERBY NEWID()"; // i did tat paremetrized query thing here
перешагните через эту линию и введите
? cmdText
в ближайшем окне Visual studio. Ты бы видел
SELECT Top '10'Question,Opt1,Opt2,Opt3,Opt4 from Questions where SubName='xxxxxx' ORDERBY NEWID()
Очевидно 10 и xxxxxбудет заменен тем, что у вас есть в ваших текстовых полях.

Смотрите долго и пристально на Top '10'Question

Возможно, если бы это было сказано Top 10 Question это может сработать?


stella bloom

он работает для топ-5 или топ-10, но застрял на вводе пользователя в текстовом поле или даже если я выбираю ввод из combobox, будь то 10 quest 20 30 и т. д..

CHill60

Он терпит неудачу, потому что вы окружили число одинарными кавычками. Это делает его строкой и это синтаксически неверно

stella bloom

спасибо Вам большое .. вы всегда помогаете