Это таблица информации о студентах, откуда поступает информация о студентах. //Это код входа для пользователя, и он получает информацию о входе пользователя из таблицы studentinfo.
private void btnlogin_Click(object sender, EventArgs e)
{
i = 0;
con.Open();
MySqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select * from stdinfotable WHERE Username='" + textuser.Text + "' and Password= '" + textpass.Text + "'";
cmd.ExecuteNonQuery();
DataTable dt = new DataTable();
MySqlDataAdapter dta = new MySqlDataAdapter(cmd);
dta.Fill(dt);
i = Convert.ToInt32(dt.Rows.Count.ToString());
if (i==0)
{
MessageBox.Show("Error");
}
else
{
this.Hide();
StudentPage f = new StudentPage();
f.Show();
MySqlDataAdapter data = new MySqlDataAdapter("ViewAllGrades", con);
data.SelectCommand.CommandType = CommandType.StoredProcedure;
DataTable dtTable = new DataTable();
data.Fill(dtTable);
dtTable.Select("Last_Name");
f.stdGrade.DataSource = dtTable;
f.stdGrade.Columns[0].Visible = false;
}
con.Close();
}
Это ViewlAllGrades хранимая процедура, из которой возвращается информация об оценке.
CREATE DEFINER=`root`@`localhost` PROCEDURE `ViewAllGrades`()
BEGIN
SELECT *
FROM Grades;
END
Я пытаюсь сделать так, чтобы только вошедший в систему пользователь мог просматривать свою собственную оценку, а не просматривать каждую оценку пользователя. Поэтому мне интересно, должен ли я попытаться сделать это в хранимой процедуре или в Visual Studio и как мне добиться такого? Кроме того, мои первичные ключи, которые являются идентификаторами, из обеих таблиц автоматически увеличиваются, поэтому я не обязательно могу использовать эти
@Мануэль Как? все теги верны, то, что я использую, каждый тег имеет отношение к моему коду. Кроме того, какие еще детали я могу добавить?
Такие теги, как mysql и mysql-workbench, здесь на самом деле не нужны, но помимо тегов код, которым вы поделились, кажется, уже делает то, что вы говорите, в операторе else вы уже заполняете таблицу, этот код не дает желаемых эффектов?
@ Мануэль, нет, код работает, но не так, как я хочу. Когда пользователь входит в систему со своими учетными данными, он должен просматривать только свою собственную оценку, а не всех остальных, где мне нужна помощь. Я просто хочу, чтобы вошедший в систему пользователь мог просматривать свою собственную информацию.
Я вижу, вам нужно запустить фильтрацию запросов по идентификатору пользователя. Не используйте хранимую процедуру для чтения данных, используйте оператор select. Когда вы аутентифицируете пользователя, вы получаете список строк, который теоретически должен быть только один. Проверьте таблицу stdinfotable , найдите идентификатор и используйте этот идентификатор для фильтрации оценок таблицы.
@ Мануэль, как я могу выразить это на языке кода, я все еще новичок.
Чтобы иметь возможность ответить, вам нужно добавить некоторые дополнительные детали, такие как структура данных.
@Norcino, что вы подразумеваете под структурой данных? Я изучаю это сам, если бы вы могли помочь, я был бы очень признателен.





Сейчас ваша хранимая процедура выбирает все оценки. Первое, что нужно сделать, это параметризовать запрос, приняв пользователя в качестве входных данных и используя предложение WHERE, чтобы найти только оценки для этого учащегося. Не видя ваших таблиц, я не могу точно сказать, как это будет выглядеть, но в качестве примера: SELECT * FROM Grades WHERE StudentId = @StudentId;
Второе, что вам нужно выяснить, это как получить идентификатор студента текущего пользователя, а затем передать его хранимой процедуре. Опять же, не видя ваших таблиц, я с трудом догадываюсь. Похоже, у вас уже есть имя пользователя текущего пользователя. Можете ли вы выполнить запрос, чтобы найти studentId по имени пользователя? Если это так, вам сначала нужно запустить эту процедуру с именем пользователя в качестве параметра, чтобы получить studentId.
Третья проблема связана с вашим первым запросом. Поскольку он не был параметризован, он подвержен атакам путем внедрения кода SQL. Это представляет ОСНОВНУЮ угрозу безопасности. Если кто-то злонамеренно введет имя пользователя или пароль, он может скрыться от SQL, который вы намеревались запустить, и удалить все ваши таблицы.
Надеюсь, это поможет!
Я просто вставил в таблицу studentinfo
В этом вопросе недостаточно информации, а теги неверны, пожалуйста, обновите свой вопрос, добавив больше деталей. Не храните простые пароли в базе данных, никогда! Погуглите по теме, хешируйте пароли например. Кроме того, вы должны попытаться лучше организовать свой код и дать переменным осмысленные имена.