Quantcast
Channel: Visual C# forum
Viewing all articles
Browse latest Browse all 31927

Turn 3 MySQL queries into 1?

$
0
0

Hello guys. I have a method which queries my database 3 times and I was wondering how would I re-write this method to get all the info needed in just ONE query to the database, instead of 3 separate instances?

Here is the method:

        #region Background online pilots information do work
        private void bgOnlinePilotsInformation_DoWork(object sender, DoWorkEventArgs e)
        {
            object[] args = e.Argument as object[];

            string strSQL = "SELECT * FROM liveacars WHERE vblName = '" + args[0].ToString() + "'";
            string strProvider = "Data Source=" + MySQLHost + ";Database=" + MySQLDatabase + ";User ID=" + MySQLUser + ";Password=" + MySQLPassword;

            try
            {
                MySqlConnection mysqlCon = new MySqlConnection(strProvider);
                mysqlCon.Open();

                if (mysqlCon.State.ToString() == "Open")
                {
                    MySqlCommand mysqlCmd = new MySqlCommand(strSQL, mysqlCon);
                    MySqlDataReader mysqlReader = mysqlCmd.ExecuteReader();

                    if (mysqlReader.HasRows)
                    {
                        while (mysqlReader.Read())
                        {
                            vblOnlinePilotsFlying = mysqlReader.GetString("vblFlightNumber");
                            vblOnlinePilotsEquipment = mysqlReader.GetString("vblEquipment");
                            vblOnlinePilotsFlightRoute = mysqlReader.GetString("vblDeparture") + " (" + mysqlReader.GetString("vblDepartureIcao") + ") - " + mysqlReader.GetString("vblArrival") + " (" + mysqlReader.GetString("vblArrivalIcao") + ")";
                            vblOnlinePilotsAltitude = mysqlReader.GetString("vblAltMsl");
                            vblOnlinePilotsHeading = mysqlReader.GetString("vblHeadingMagnetic") + "°";
                            vblOnlinePilotsSpeed = mysqlReader.GetString("vblIas") + " kts";
                            vblOnlinePilotsStatus = mysqlReader.GetString("vblPhase");
                            vblOnlinePilotsCarrier = mysqlReader.GetString("vblCarrier");
                            vblOnlinePilotsLastUpdate = mysqlReader.GetString("last_update");
                            vblOnlinePilotsLDVersion = mysqlReader.GetString("vblLDVersion");
                        }
                    }
                    else
                    {
                        vblOnlinePilotsName = args[0].ToString();
                        vblOnlinePilotsCarrier = "TBA";
                        vblOnlinePilotsFlying = "TBA";
                        vblOnlinePilotsEquipment = "";
                        vblOnlinePilotsFlightRoute = "TBA";
                        vblOnlinePilotsAltitude = "0";
                        vblOnlinePilotsHeading = "TBA";
                        vblOnlinePilotsSpeed = "TBA";
                        vblOnlinePilotsStatus = "Pre-flight planning";
                        vblOnlinePilotsLastUpdate = "TBA";
                        vblOnlinePilotsLDVersion = "TBA";
                    }

                }
                mysqlCon.Close();
            }

            catch (Exception er)
            {
                MessageBox.Show("Error Retrieving Pilot Info (1): " + er.Message);
            }


            string strSQL1 = "SELECT " + UserTable + ".*, " + ProfileTable + ".* FROM " + UserTable + " LEFT JOIN " + ProfileTable + " ON " + UserTable + "." + IdField + " = " + ProfileTable + "." + UserIdField + " WHERE " + UserTable + "." + NameField + " = '" + args[0].ToString() + "'";
            try
            {
                MySqlConnection mysqlCon1 = new MySqlConnection(strProvider);
                mysqlCon1.Open();

                if (mysqlCon1.State.ToString() == "Open")
                {
                    MySqlCommand mysqlCmd1 = new MySqlCommand(strSQL1, mysqlCon1);
                    MySqlDataReader mysqlReader1 = mysqlCmd1.ExecuteReader();

                    while (mysqlReader1.Read())
                    {
                        vblOnlinePilotsName = args[0].ToString();
                        vblOnlinePilotsHours = mysqlReader1.GetString(HoursField);
                        vblOnlinePilotsFullName = mysqlReader1.GetString(NameField);
                    }

                }
                mysqlCon1.Close();
            }

            catch (Exception er)
            {
                MessageBox.Show("Error Retrieving Pilot Info (2): " + er.Message);
            }

            string strSQL2 = "SELECT *, COUNT(*) as rowcount FROM pireps WHERE vblName = '" + args[0].ToString() + "' GROUP BY vblName";
            try
            {
                MySqlConnection mysqlCon2 = new MySqlConnection(strProvider);
                mysqlCon2.Open();

                if (mysqlCon2.State.ToString() == "Open")
                {
                    MySqlCommand mysqlCmd2 = new MySqlCommand(strSQL2, mysqlCon2);
                    MySqlDataReader mysqlReader2 = mysqlCmd2.ExecuteReader();
                    if (mysqlReader2.HasRows)
                    {
                        while (mysqlReader2.Read())
                        {
                            vblOnlinePilotsLegs = mysqlReader2.GetString("rowcount");
                        }
                    }
                    else
                    {
                        vblOnlinePilotsLegs = "0";
                        vblOnlinePilotsHours = "0";
                    }
                }
                mysqlCon2.Close();
            }

            catch (Exception er)
            {
                MessageBox.Show("Error Retrieving Pilot Info (3): " + er.Message);
            }

        }
        #endregion

Reason I am asking is because I think the method is taking too long to complete and it's because of 3 SQL queries. Or is it better to leave it as is?

Thanks in advance for any help.


Viewing all articles
Browse latest Browse all 31927

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>