Отображение информации SQL пользователя на основе имени пользователя в приложении WPF - PullRequest
0 голосов
/ 23 июня 2019

Я создаю приложение WPF, в котором пользователь создает учетную запись и может войти в систему со своим именем пользователя и паролем.После успешного входа пользователя в систему его имя пользователя и другие данные, которые он вводил во время регистрации, должны отображаться на следующей странице.До сих пор, когда я делаю это, единственное, что отображается, это информация о первом зарегистрированном пользователе, независимо от того, какое имя пользователя или пароль используется, но оно должно основываться на том, кто вошел в систему.
Лучше объяснить, есть пользователь A и пользователь B, когда пользователь A входит в свою информацию, отображается, когда пользователь B входит в систему, информация пользователя A по-прежнему отображается независимо от того, что я хочу, чтобы информация о пользователе B (и всех последующих пользователях) отображалась при вводе его конкретного имени пользователя.

C # для команды регистрации

private void SubmitBtn_Click(object sender, RoutedEventArgs e)
        {
            if (tbStudentName.Text == "" || pbPassword.Password == "" || tbSchoolName.Text == "" || tbHouseName.Text == ""
                || tbProg.Text == "" || tbPhoneNumber.Text == "" || tbAddress.Text == "")
            {
                var dim = new Dim();
                dim.Show();
                this.Effect = new BlurEffect();

                var cmb = new Custom_MessageBoxes.CustomMsgBox2();
                cmb.ShowDialog();

                this.Effect = null;
                dim.Close();
            }

            else
            {
                Connect obj = new Connect();
                obj.conn.ConnectionString = obj.locate;
                obj.conn.Open();
                string InsertUser = "INSERT INTO tblSignUp values ('"+tbStudentName.Text+ "', '" + tbSchoolName.Text + "', '" + tbHouseName.Text + "', '" + tbProg.Text + "', '" + tbPhoneNumber.Text + "', '" + tbAddress.Text + "', '" + pbPassword.Password + "')";
                obj.cmd.Connection = obj.conn;
                obj.cmd.CommandText = InsertUser;
                obj.cmd.ExecuteNonQuery();
                obj.conn.Close();

                var dim = new Dim();
                dim.Show();
                this.Effect = new BlurEffect();

                var cmb = new Custom_MessageBoxes.RegistrationComplete();
                cmb.ShowDialog();

                this.Effect = null;
                dim.Close();
                Clear();
            }
        }

C # для команды входа

//Sign In button click event
        private void UserSignInBtn_Click(object sender, RoutedEventArgs e)
        {
            SqlConnection sqlCon = new SqlConnection(connectionString);


            try
            {
                Connect obj = new Connect();
                obj.conn.ConnectionString = obj.locate;

                obj.conn.Open();
                SqlDataAdapter adapter = new SqlDataAdapter("SELECT COUNT (*) FROM tblSignUp WHERE StudentName = '"+tbID.Text+"' AND Password = '"+PB.Password+"'", obj.conn);
                DataTable dt = new DataTable();
                adapter.Fill(dt);
                if (dt.Rows[0][0].ToString() == "1")
                {
                    // Custom Message Box and Dim Effect
                    var jim = new Dim();

                    jim.Show();
                    this.Effect = new BlurEffect();

                    var lsmb = new Custom_MessageBoxes.LoginSuccessfulMsgBox();
                    lsmb.ShowDialog();

                    this.Effect = null;
                    jim.Close();

                    var User_Homepage = new User_Homepage();
                    NavigationService.Navigate(User_Homepage);
                }
                else
                {
                    // Custom Message Box and Dim Effect 2
                    var him = new Dim();

                    him.Show();
                    this.Effect = new BlurEffect();

                    var rmdlgb = new ReturnMessageDialogueBox();
                    rmdlgb.ShowDialog();

                    this.Effect = null;
                    him.Close();
                }


                obj.conn.Close();

            }
            catch(Exception ex)
            {
                using (EventLog eventlog = new EventLog("Application"))
                {
                    eventlog.Source = "SQL Error: From My Application";
                    eventlog.WriteEntry(ex.StackTrace, EventLogEntryType.Error, 101, 1);
                }
            }
            finally
            {
                sqlCon.Close();
            }
        }

Страницагде я хочу информацию о пользователе

string connectionString = @"Data Source=HP;Initial Catalog=User_SignUpDB;Integrated Security=True;";


        public UHP()
        {
            InitializeComponent();


            Page1 p1 = new Page1();
            var pls = p1.tbID.Text;

            SqlConnection sqlCon = new SqlConnection(connectionString);
            sqlCon.Open();

            string query = "SELECT * FROM tblSignUP WHERE StudentName = StudentName and HouseName = HouseName";
            SqlCommand createCommand = new SqlCommand(query, sqlCon);


            SqlDataReader dr = createCommand.ExecuteReader();
            if (dr.Read())
            {
                nameTxt.Text = (dr["StudentName"].ToString());
                hseTxt.Text = (dr["HouseName"].ToString());
                progTxt.Text = (dr["Prog"].ToString());
            }


            sqlCon.Close();


        }

1 Ответ

0 голосов
/ 23 июня 2019

Ваш запрос:

SELECT *
FROM tblSignUP
WHERE
    StudentName = StudentName
    AND HouseName = HouseName

Нет параметров, передаваемых в это; это просто жесткое утверждение.

Вы сравниваете эквивалентные поля в своем предложении WHERE, что делает его избыточным, т. Е. Вы действительно просто делаете SELECT * из таблицы. Поэтому то, что вы читаете в своем приложении, всегда возвращается только в первой строке.

Что вам нужно, это что-то вроде:

string query = "SELECT * FROM tblSignUP WHERE StudentName = @StudentName and HouseName = @HouseName";

SqlCommand createCommand = new SqlCommand(query, sqlCon);

createCommand.Parameters.Add(new SqlParameter("@StudentName", StudentName));
createCommand.Parameters.Add(new SqlParameter("@HouseName", HouseName));

Переменные для StudentName и HouseName, которые передаются в конструктор SqlParameter (второй аргумент), я предполагаю, что где-то уже определены в вашем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...