ali sheibani Ответов: 2

Почему бы не работать в SQL


строки sql2 = "выбрать [а],[кол-во дубликатов] от [повтор дест], где [A], как '" + textBox4.Текст + "' ";
используя (системы.Данных.Sqlclient как.Команда sqlcommand cmd по = новой системы.Данных.Sqlclient как.Команда sqlcommand(на сервере sql1, conn2))
{
conn2.Открыть();

Системы.Данных.Sqlclient как.Класс sqldatareader читатель = нуль;

reader = cmd.Метода executereader();
в то время как (читатель. читать())
{
textBox4.Текст = (читателя["а"]).Метод toString();
}}

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

почему не работает команда sql??
пожалуйста, помогите мне?

[no name]

Это может быть что угодно. Но наиболее вероятная причина заключается в том, что вы определяете какой-то ужасный SQL как sql2, но используете некоторую строку с именем sql1 в своем командном объекте.

Dave Kreskowiak

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

RedDk

Хороший репост. И совершенно законно (судья на этот раз в зале суда). Но NPC, скорее всего, прав, ошибка-это какая-то мелкая ошибка в написании.

pt1401

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

Вы не даете достаточно информации - для начала, какую ошибку вы получаете?
Вот такая возможность:-
Ваша строка sql 'sql2' не используется - ваша команда использует sql1, о котором вы не сообщаете никаких подробностей.

Кроме того, не стоит строить sql с конкатенацией строк.
Погуглите немного о SQL-инъекции и параметрах sql.

[no name]

Я вижу, что вы определили "sql2", но вы назначили" sql1 " своему командному объекту? Это правильный SQL-скрипт, на который вы указываете здесь?

Ammar Shaukat

Вы уверены, читатель["а"]. Index - это строка, а не Int .

Maciej Los

Вы пробовали запустить свою инструкцию SQL на SQL server?

Philippe Mori

Даже если Эмглиш не является вашим родным языком, вы можете хотя бы попытаться отформатировать свой код.

2 Ответов

Рейтинг:
2

OriginalGriff

Во-первых, потому что вы делаете это неправильно: никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.

Во-вторых, потому что вы используете неправильную строку sql: вы объявляете sql2 и использовать sql1 в вашем распоряжении...
Наконец, потому что LIKE требует подстановочных знаков SQL для того, чтобы найти "похожее" совпадение. В этом случае вы, вероятно, хотите " % " в начале и конце вашего предложения:

string sql2 = "SELECT [A],[number of dups] FROM [Repeat of dest] WHERE [A] LIKE '%' + @STR + '%'";
using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sql2, conn2))
    {
    conn2.Open();
    cmd.Parameters.AddWithValue("@STR",  textBox4.Text);
    ...


И задайте себе вопрос: есть ли смысл задавать вопросы, если вы просто собираетесь игнорировать советы, которые вам дают? Это не первый раз, когда я рассказываю вам о SQL Inject и параметризованных запросах или о подобной проблеме, но вы явно не слушаете и не думаете о том, что вам сказали. Пожалуйста, начните делать оба...


Рейтинг:
0

Patrice T

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