C# — почему сервер MySQL медленный в моей машине сервера?

Я разработал PoS-приложение, и во время тестирования с 2 ПК я не столкнулся ни с какими проблемами со скоростью. Это просто простая настройка LAN-кабеля между 2 компьютерами. Но когда я развернул его в клиенте, он работал медленно.

Клиент имеет 1 ПК, служащий администратором и основным сервером, и есть еще 2 ПК, служащие кассиром. Все подключено в маршрутизаторе. Кассиры подключаются к ПК администратора (главному серверу) для получения, вставки, обновления и удаления данных. Я просто хочу спросить, есть ли процессы, которые должны быть сделаны в MySQL, или что-то не так с моими кодами при подключении к базе данных.

Вот мой пример кода для подключения к базе данных, я сомневаюсь, что возникли проблемы с ним, так как это было стандартом при подключении к базе данных и добавлении записей. Просто на случай, если я мог бы утомить вас с кодами, вы можете просто перейти ко второму коду, который я опубликовал, у меня есть комментарий там с просьбой, если инициализация моего класса является правильным. Спасибо всем!

class DBConnection
{
    private MySqlConnection connection;
    private MySqlCommand cmd;
    private MySqlDataReader dr;
    private DataTable tbl;
    private MySqlDataAdapter da;
    private DataSet ds;
    private string connectionString;
    private string server;
    private string database;
    private string uid;
    private string password;

    private frmNotifOk myNotification;
    public DBConnection()
    {
        Initialize();
    }
    private void Initialize()
    {
        server = "CASHIER";
        database = "sampledb";
        uid = "root";
        password = "samplepassword";
        connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
        connection = new MySqlConnection(connectionString);
    }

    private bool OpenConnection()
    {
    try
    {
        connection.Open();
        return true;
    }
    catch (MySqlException ex)
    {
        switch (ex.Number)
        {
            case 0:
                MessageBox.Show("Cannot connect to server.");
                break;
        }
        return false;
    }
}

private void CloseConnection()
{
    try
    {
        connection.Close();
    }
    catch (MySqlException ex)
    {
        MessageBox.Show("Error: " + ex.Message);
    }
}

public void AddRecord(String DBQuery, bool showNotif)
{
    string query = DBQuery;
    bool notify = showNotif;
    try
    {
        if (this.OpenConnection() == true)
        {
            cmd = new MySqlCommand(query, connection);
            cmd.ExecuteNonQuery();
            if (notify)
            {
                MessageBox.Show("Item successfully added.");
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error: " + ex.Message);
    }
    finally
    {
        this.CloseConnection();
    }
}

И, наконец, вот как я использую метод в форме:

public partial class frmNewCashier : Form
{
    private DBConnection dbConnect;
    string sampleDataSource= "SELECT * FROM SampleTable";

    public frmNewCashier()
    {
        InitializeComponent();
        //Is this the correct place of initializing my DBConnection class?
        dbConnect = new DBConnection();
    }

    private void frmCashier_Load(object sender, EventArgs e)
    {
        try
        {
            dgvSearchItems.DataSource = dbConnect.DatabaseToDatagrid(dgvSearchItemsDataSource);
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: " + ex.Message);
        }
    }

}

Я поставил инициализацию класса DBConnection вpublic frmNewCashier(), это правильное место или я должен поместить его в событие Load или где-то? Я думаю, если это имеет отношение к медлительности базы данных. Помимо этого вопроса, Вы знаете что-нибудь, что я мог пропустить, что вызывает медлительность?

2 ответа

  1. Сначала попробуйте выполнить pinging с клиентского компьютера на сервер, на котором установлен SQL server. Если это занимает слишком много времени, то есть проблема с сетевым подключением.

    Если нет, поставьте точку отладки и попробуйте выполнить отладку, а затем определите расположение, которое занимает слишком много времени. Тогда вы сможете получить ответ.

    Кроме того, не забудьте закрыть каждое подключение к БД после его использования.

  2. класс DBConnect
    {
    публичное подключение MySqlConnection;
    частный строковый сервер;
    база данных частных строк;
    частная строка uid;
    пароль частной строки;

        //Constructor
        public DBConnect()
        {
            Initialize();
        }
    
        //Initialize values
        public void Initialize()
        {
            server = "localhost";
            database = "db_sea_horses";
            uid = "root";
            password = " " ;
            //password = "123";
            string connectionString;
            connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
            connection = new MySqlConnection(connectionString);
        }
    
    
        //open connection to database
       public  bool OpenConnection()
        {
            try
            {
                connection.Open();
                return true;
            }
            catch (MySqlException ex)
            { //0: Cannot connect to server.
                //1045: Invalid user name and/or password.
                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;
            }
        }
    

    }


    класс DBmethods : DBConnect
    {
    DataSet dataset2;

     public void input_sql(string query)
     {
         try
         {
           //open connection
             if (this.OpenConnection() == true)
             {
                 //create command and assign the query and connection from the constructor
                 MySqlCommand cmd = new MySqlCommand(query, connection);
    
                 //Execute command
                 int x = cmd.ExecuteNonQuery();
                  //close connection
                 this.CloseConnection();
    
             }
    
         }
    
         catch(MySqlException myex) 
         {
                   MessageBox.Show(ex.Message);
         }
     }
    
     ///////////////////////////////////////////////
     /////  select 
     /////////////////////////////////////////////
    
     public DataSet output_sql(string query,String table_name)
     {
    
    
             //Open connection
             this.OpenConnection();
    
             DataSet dataset = new DataSet();
    
             MySqlDataAdapter adapter = new MySqlDataAdapter();
             adapter.SelectCommand = new MySqlCommand(query, connection);
             adapter.Fill(dataset, table_name);
            //close Connection
             this.CloseConnection();
             //return list to be displayed
         return dataset;
    
    
     }
    
    }
    

    }


    пример вызова метода

    1) Инструкция insert / update / delete

    DBmethods dbm = новые DBmethods();
    дБм.input_sql («можно удалить запрос insert / update / delete»);

    2) Выберите инструкцию

    DataSet ds = dbm.output_sql («select * from storage_bunkers where job_id LIKE’ % » + itemname.Текст +»%'», » storage_bunkers»);
    DataView myView = ((DataTable)ds.Таблицы [«storage_bunkers»]).DefaultView;
    dataGridView1.DataSource = myView;