Computer Wiz99 Ответов: 1

Как фильтровать базу данных?


Я пытаюсь отфильтровать свою базу данных, используя False, который находится в столбце с именем Submitted. У меня есть код для создания и отображения базы данных. Я пытаюсь просто отфильтровать его по ложным данным. Поэтому просто пытаюсь отобразить данные, которые имеют значение False в этом столбце. Я просто не могу получить правильный код для фильтрации базы данных. Это мой первый раз, когда я пробую этот метод фильтрации. Обычно я делал это с помощью Gridview в ASP. Может мне кто-то пожалуйста, помогите?

SqlCommand com2 = new SqlCommand("Select USER_ID, LongName, SUBMITTED, YEAR, DATE from Table12 where SUBMITTED = 'False' and YEAR = '" + TextBoxYEAR.Text + "'", con2);

DataTable dt2 = new DataTable();
            SqlDataReader sqlDataReader2 = com2.ExecuteReader();


            dt2.Load(sqlDataReader2);
            sqlDataReader2.Close();

            GridView dataGridView3 = new GridView();
            GridView3.DataSource = dt2;
            GridView3.DataBind();
            lblCount3.Text = GridView3.Rows.Count.ToString();


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

FilterExpression filter1 = new FilterExpression();

ZurdoDev

Поскольку мы не можем видеть ваши данные, что вы хотите, чтобы мы сделали?

Computer Wiz99

Каков наилучший способ использования фильтра по коду, который я использую?
Я знаю, как сделать это на стороне ASP, используя свойства представления сетки, но никогда не делал этого в C# при построении Gridview.

ZurdoDev

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

Richard Deeming

SUBMITTED = 'False'

Почему вы храните логические флаги в виде строк? Используйте bit вместо этого введите - 0 для ложных, и 1 ибо это правда.

bit (Transact-SQL) | Microsoft Docs[^]

1 Ответов

Рейтинг:
2

OriginalGriff

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

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку с точки зрения SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x'; DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?

Затем удалите условие WHERE и посмотрите, какие именно строки вы получите обратно.
Если это выглядит разумно, добавьте обратно половину " где " и повторите попытку. Если это сработает, добавьте вместо этого другую половину и посмотрите, что вы получите.
Помните, что и требует, чтобы оба условия были истинными, чтобы соответствовать строке.

Мы ничего не можем сделать для вас: у нас нет доступа к вашим данным!