Как я могу сделать так, чтобы мой проект занимал один столбец, чтобы я мог использовать его при вставке в значения из другого окна с помощью select from - PullRequest
0 голосов
/ 27 апреля 2020

позвольте мне объяснить идею моего простого проекта, чтобы вы могли получить мой вопрос. У меня есть страница с несколькими входами в систему, первая страница - студент, а другой администратор - на странице входа, значения установлены как выберите из, а в студенте это задан как вставка в, так что проблема в том, что студент войдет в свое окно и сделает запрос, и он go вернется в базу данных, но проблема, с которой я сейчас сталкиваюсь, я не могу сказать, какой студент сделал запрос! Мне нужно каким-то образом взять имя пользователя столбца из таблицы входа в систему, который выбран как выбрать из и сделать его во вставку в таблицу студента! я понятия не имею, как это сделать, но я надеюсь, что вы получите мой вопрос, я поставлю код для справки и извините мой вопрос ладьи ie и кодирование.

 if (sqlCon.State == ConnectionState.Closed)
                sqlCon.Open();
                string query = "SELECT count (1) FROM Login WHERE Username=@Username AND password=@password AND usertype=@usertype";
            SqlCommand sqlCmd = new SqlCommand(query, sqlCon);


            sqlCmd.CommandType = CommandType.Text;
            sqlCmd.Parameters.AddWithValue("@Username", txtUsername.Text);
            sqlCmd.Parameters.AddWithValue("@password", txtPassword.Text);
            if (checkbox1.IsChecked == true)
            sqlCmd.Parameters.AddWithValue("@usertype", checkbox1.Content.ToString());
            else if (checkbox2.IsChecked == true)
                sqlCmd.Parameters.AddWithValue("@usertype", checkbox2.Content.ToString());
            int count = Convert.ToInt32(sqlCmd.ExecuteScalar());
            if (count == 1)

            {
                if ((bool)checkbox1.IsChecked == true)
                {

                    MainWindow Dashboard = new MainWindow();
                    Dashboard.Show();
                    MessageBox.Show("You're logged in as an Admin");


                    this.Close();
                }

                if ((bool)checkbox2.IsChecked == true)
                {

                    Student stu = new Student();
                    stu.Show();
                    MessageBox.Show("You're logged in as a Student");
                    this.Close();
                 }
            }

/// Окно ученика

  private void button_Click(object sender, RoutedEventArgs e)
    {

        using (var Con = new SqlConnection(@"Data Source = test\SQLEXPRESS; Initial Catalog =Log-In; Integrated Security = True"))
        {
            Con.Open();
            var table = "INSERT INTO  Student(DepartureCiry,ArrivalCity,DateOfDeparture,DateOfReturn)VALUES(@DepartureCiry,@ArrivalCity,@DateOfDeparture,@DateOfReturn)";
            using (var cmd = new SqlCommand(table, Con))
            {
                cmd.Parameters.AddWithValue("@DepartureCiry", fromtxt.Text);
                cmd.Parameters.AddWithValue("@ArrivalCity", Totxt.Text);
                cmd.Parameters.AddWithValue("@DateOfDeparture", date_time_picker.Text);
                cmd.Parameters.AddWithValue("@DateOfReturn", date_time_picker1.Text);
                cmd.ExecuteNonQuery();
                MessageBox.Show("Data inserted suckssfully");

1 Ответ

0 голосов
/ 28 апреля 2020

Вам нужно изменить свой запрос на

string query = "SELECT Username FROM Login WHERE Username=@Username AND password=@password AND usertype=@usertype";

Вместо того, чтобы выбирать только count(1), вы выбираете фактическую строку (в моем случае я выбираю только столбец Username, так как он вам нужен только ).

Тогда вместо вызова ExecuteScalar в команде sql вам нужно использовать SqlDataReader для фактического получения строки.

        SqlDataReader reader = sqlCmd.ExecuteReader();
        if (reader.HasRows)
        {
            string userName;
            while (reader.Read())
            {
                userName = ((IDataRecord)reader)["Username"].ToString();
                break;
            }
        }

Отсюда у вас есть ученик имя из таблицы входа. Однако мое наблюдение заключается в том, что это имя на самом деле будет таким же, как txtUsername.Text. Я думаю, что вам нужны некоторые другие столбцы из таблицы Students, но обычно это способ их извлечения - пользователь SqlDataReader и извлечение столбца с помощью ((IDataRecord)reader)["MyColumnName"].

Некоторые дополнительные примечания: I используйте свойство HasRows в считывателе, чтобы увидеть, есть ли у него совпадение, вместо получения счетчика. И я подразумеваю, что у вас есть уникальные имена пользователей в базе данных (иначе вы должны l oop считыватель, чтобы увидеть, сколько строк он возвращает).

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