Отправка данных после входа в другую форму C# - PullRequest
3 голосов
/ 19 марта 2020

Я только начал кодировать с C# и SQL на этой неделе, чтобы создать настольное приложение; после входа в систему я хочу поместить пользовательские данные, которые вошли в другую форму # приборной панели, но я не мог найти способ сделать это. Я нашел способ создать класс и поместить в него эти пользовательские данные, чтобы вы могли получить их; но я действительно застрял здесь.

public void bunifuFlatButton1_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection("Data Source=DESKTOP-R3ILNJ7;Initial Catalog=Project2;Integrated Security=True");
    String query = "SELECT * FROM USERDB WHERE PRENOM='" + alphaBlendTextBox1.Text + "'AND PASS='" + alphaBlendTextBox2.Text + "'";

    SqlDataAdapter sda = new SqlDataAdapter(query, con);
    DataTable dtbl = new DataTable();
    sda.Fill(dtbl);

    if(dtbl.Rows.Count == 1) 
    {
        string name = dtbl.Rows[0]["Nom"].ToString();
        this.Hide(); 

        Form1 f1 = new Form1();
        f1.ShowDialog();
    }
    else
        MessageBox.Show("mauvais password try again"); 
}

Ответы [ 2 ]

2 голосов
/ 19 марта 2020

Измените конструктор Form1 и при создании объекта Form1 также передайте значение, которое вы можете использовать в вашей Form1. Ниже приведен пример кода вашей формы 1:

namespace YourNameSpace
{
    public partial class Form1 : Form
    {
        DataTable MyDataTable = new DataTable();

        public Form1(DataTable _MyDataTable)
        {
            InitializeComponent();

            MyDataTable = _MyDataTable;           
        }
    }
}

Затем измените код, чтобы передать значения в эту форму, как показано ниже:

if(dtbl.Rows.Count == 1) 
{
    string name = dtbl.Rows[0]["Nom"].ToString();        
    this.Hide();
    Form1 f1 = new Form1(dtbl);
    f1.ShowDialog();
}
else
    MessageBox.Show("mauvais password try again");
2 голосов
/ 19 марта 2020

Один из способов сделать это - создать объект, который содержит данные, которые вы читаете из вашей БД, а затем передать их в конструктор вашей новой формы.

//This class will store the data from the DB
public class MyClass
{
    Public string Name { get; set; }
    //Repeat for all fields retrieved from the DB that you require.

    public MyClass() 
    {

    }
}


  //I changed below to have Using clauses.  The way you had it you were not correctly disposing your objects and disconnecting from the DB, 
//and you would have memory leaks and other problems later
DataTable dtbl = new DataTable();
using (SqlConnection con = new SqlConnection("Data Source=DESKTOP-R3ILNJ7;Initial Catalog=Project2;Integrated Security=True"))
{       
    //I Changed this to use Parameters!
    //See https://www.dreamincode.net/forums/topic/268104-the-right-way-to-query-a-database-parameterizing-your-sql-queries/

    String query = "SELECT * FROM USERDB WHERE PRENOM= @PRENOM AND PASS= @PASS";      
    using (SqlCommand command = new SqlCommand(query, con)) 
    {
        using (SqlDataAdapter sda = new SqlDataAdapter(command))
        {               
            //Check the SQLDbType below is correct for you DB schema!  
            sda.SelectCommand.Parameters.Add("@PRENOM", SqlDbType.NVarChar).Value = alphaBlendTextBox1.Text; 
            sda.SelectCommand.Parameters.Add("@PASS", SqlDbType.NVarChar).Value = alphaBlendTextBox2.Text; 
            sda.Fill(dtbl);             
        }
    }
}


//Declare your class here
MyClass mc = new MyClass();

if(dtbl.Rows.Count == 1) 
{
    mc.Name = dtbl.Rows[0]["Nom"].ToString();

    Form1 f1 = new Form1(mc);
    this.Hide(); 
    f1.ShowDialog();
}
else
    MessageBox.Show("mauvais password try again");

dtbl = null;


//Now update your Form code and create a new constructor
public partial class Form1 : Form
{
     //This is where you will store the incoming data
     private MyClass IncomingMyClass { get; set; }

     //Change the existing constructor to Private
     private Form1()
     {
         InitializeComponent();
     }

     //Create a new constructor, which calls the empty (now private) constructor above
     public Form1(MyClass myclass): this()
     {
        this.IncomingMyClass = myclass;
     }
     ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...