Как передать данные из одной формы в другую в c #? - PullRequest
0 голосов
/ 02 декабря 2018

Я хочу получить доступ к openConnection из моего класса dbconnect из другой формы, но он не работает должным образом.Мне нужно скопировать и вставить все Oopenconnection на другую страницу, чтобы они могли получить к нему доступ.

class dbconnect

class DB_Connect
{
    private MySqlConnection connection;
    private string server;
    private string database;
    private string uid;
    private string password;

    //Constructor
    public DB_Connect()
    {
        Initialize();
    }

    //Initialize values
    private void Initialize()
    {
        server = "localhost";
        database = "xyz";
        uid = "root";
        password = "";

        string connectionString = $"datasource=127.0.0.1;port = 3306; SERVER={server}; DATABASE={database}; USERNAME={uid}; PASSWORD={password};sslmode=none";
        connection = new MySqlConnection(connectionString);
    }

    //open connection to database
    public bool OpenConnection()
    {

        try
        {
            connection.Open();
            return true;
        }
        catch (MySqlException ex)
        {

            switch (ex.Number)
            {
                case 0:
                    MessageBox.Show("Cannot connect to server. Contact administrator");
                    break;

                case 1045:
                    MessageBox.Show("Invalid username/password, please try again");
                    break;
            }
            return false;
        }

    }

    //Close connection
    public bool CloseConnection()
    {
         try
            {
                connection.Close();
                return true;
            }
            catch (MySqlException ex)
            {
                MessageBox.Show(ex.Message);
                return false;
         }

    }

}

MyForm 2 При нажатии данные отображаются в dataGridView

 private void display_record_Click(object sender, EventArgs e)
    {
        DB_Connect connect = new DB_Connect(); // I believe this part does not work

        string show_query = "SELECT * FROM testing_tb"; 

        if (connect.OpenConnection() == true)
        {

            using (MySqlCommand cmd_DB = new MySqlCommand(show_query, connection))
            {

                try
                {

                    using (MySqlDataReader reader = cmd_DB.ExecuteReader())

                        if (reader.HasRows)

                        {

                            dt = new DataTable();
                            dt.Load(reader);
                            dataGridView1.DataSource = dt;

                        }
                        else
                        {
                            MessageBox.Show("No data record detected");
                        }

                    connect.CloseConnection();

                }
                catch (Exception ex)

                {
                    MessageBox.Show("Could not connect to database!\n" + ex, "Database Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }// end of catch

            } // end of MySQLCommand

        } // end of connection check
    }

Я хочу получить доступ к данным из моего dtconnect class, чтобы мне не приходилось вставлять public bool OpenConnection(){} в каждую новую форму, в которую я хочу открыть соединение.

Ошибка: не удалось подключиться к базе данных, подключение должно быть действительным и открытым и т. д.

1 Ответ

0 голосов
/ 03 декабря 2018

Если вы действительно хотите, чтобы соединение было доступно везде, вы можете использовать это:

public static class Connection
{
    private const string ConnectionString = "YOUR CONNECTION";
    public static System.Data.SqlClient.SqlConnection Conn { get; private set; } = null;

    public static void Open()
    {
        try
        {
            Conn = new System.Data.SqlClient.SqlConnection(ConnectionString);
            Conn.Open();
        }
        catch { System.Windows.MessageBox.Show("Can't connect to the server, please check if you have an internet connection."); }
    }

    public static void Close() { Conn.Close(); }
}

Это не рекомендуется, потому что ваше соединение будет открыто постоянно, поэтому вы должны сделать это вместо этого:

    public static class Connection
{
    private const string ConnectionString = "YOUR CONNECTION";
    public static System.Data.SqlClient.SqlConnection Conn { get; private set; } = null;

    public static void Create() { Conn = new System.Data.SqlClient.SqlConnection(ConnectionString); }
    public static void Open()
    {
        try { Conn.Open(); }
        catch { System.Windows.MessageBox.Show("Can't connect to the server, please check if you have an internet connection."); }
    }

    public static void Close() { Conn.Close(); }
}

И вы открываете и закрываете соединение при необходимости.Таким образом, в основном, когда вы открываете соединение при использовании запроса, вы используете Connection.Open() и Connection.Close().Теперь он доступен отовсюду, если класс использует ваши формы.

Вот ссылка о состоянии соединения: https://softwareengineering.stackexchange.com/questions/142065/creating-database-connections-do-it-once-or-for-each-query

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