c #: как получить данные из базы данных и передать в другую форму?

#c# #winforms #desktop-application

#c# #winforms #desktop-приложение

Вопрос:

Я создаю настольное приложение, в котором, когда пользователь регистрирует его в новом, его идентификатор будет отображаться в текстовом поле. Но в моем случае запрос выполняется успешно, но идентификатор не отображается в текстовом поле .. может кто-нибудь помочь мне выяснить это, пожалуйста?

Первая форма пользователя, вошедшего в систему (Form1.cs)

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace EmployeeApp
{
    public partial class login : Form
    {
        public login()
        {
            InitializeComponent();
        }

        public string employeeID;
        private void exitButton_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        private void loginButton_Click(object sender, EventArgs e)
        {
            SqlConnection connection = new SqlConnection(@"Data Source=INCEPSYS-SETEST;Initial Catalog=Employee;Integrated Security=True");
            connection.Open();
            String query = "select * from Employees where Name = '"   nameTextBox.Text   " ' and Password = '"   passwordTextBox.Text   "'";

            SqlCommand command = new SqlCommand(query, connection);
            SqlDataReader myReader = command.ExecuteReader();
            while (myReader.Read())
            {
                string employeeID = myReader["EmployeeID"].ToString();
            }
            myReader.Close();
            SqlDataAdapter sda  = new SqlDataAdapter(query,connection);            
            connection.Close();
            DataTable dt = new DataTable();
            sda.Fill(dt);
                if (dt.Rows.Count == 1)
            {
                this.Hide();
                Entry ss = new Entry(employeeID);
                ss.Show();
            }
            else
            {
                MessageBox.Show("Please Check your Username amp; password");
            }
        }

    }
}
  

Вторая форма (Entry.cs)

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace EmployeeApp
{
    public partial class Entry : Form
    {
        public Entry()
        {
            InitializeComponent();
        }
        public Entry(string employeeId)
        {
              InitializeComponent();
              idTextBox.Text = employeeId;
        }


       private void reportButton_Click(object sender, EventArgs e)
        {
            Report report = new Report();
            report.Show();
        }
    }
}
  

Ответ №1:

Удалите объявление локальной переменной, потому employeeID что это глобальная переменная и она уже объявлена первой, поэтому, когда вы добавляете к ней префикс, используя string его, создайте другую локальную переменную, которая недоступна за пределами этой области

 while (myReader.Read())
  {
      employeeID = myReader["EmployeeID"].ToString();
  }
  

Ответ №2:

У вас есть локальная переменная. Вы можете исправить и оптимизировать свой код следующим образом:

     private void loginButton_Click(object sender, EventArgs e)
    {
        //If use set quote into your textbox
        string name = nameTextBox.Text.Replace("'", "''");
        string pass = passwordTextBox.Text.Replace("'", "''");

        String query = string.Format("select * from Employees where Name = '{0}' and Password = '{1}'", name, pass);
        string employeeID = "";


        using (SqlConnection connection = new SqlConnection(@"Data Source=INCEPSYS-SETEST;Initial Catalog=Employee;Integrated Security=True"))
        {
            connection.Open();

            using (SqlDataAdapter sda = new SqlDataAdapter(query, connection))
            {
                DataTable dt = new DataTable();
                sda.Fill(dt);

                if (dt.Rows.Count > 0)
                {
                    employeeID = dt.Rows[0]["EmployeeID"].ToString();
                    this.Hide();
                    Entry ss = new Entry(employeeID);
                    ss.Show();
                }
                else
                {
                    MessageBox.Show("Please Check your Username amp; password");
                }

                dt.Dispose();

            }
        }



    }