C# MySql.Data – Adatbázis kezelés konzolos alkalmazással

12. osztály 12.évf_sql C# programozás Programozás SQL

Ebben a tutorialban a Xampp-on futó MySql adatbázist fogjuk összekötni C# konzolos alkalmazással, és felhasználjuk hozzá az Oldtimer emelt érettségi feladatot. A témakört csak érintjük, mert érettségin nem szerepel, és a tanmenetben is alig 4 órát foglalkozunk vele.

Első lépésben létrehozunk egy konzolos alkalmazást (Console App .NET Framework) Utána a NuGet Package Managerben feltelepítjük a MySql.Data csomagot. Solution Explorerben jobb klikk, majd a helyi menüben megtalálható. Ha sikeresen feltelepült, akkor a SolutionExplorer/References-ben meg fog jelenni.

A Mysql.Data csomag használatához importálni kell a szokásos módon: using MySql.Data.MySqlClient;

Következő lépésben megadjuk a csatlakozás adatait: (Xampp – localhost, alap root felhasználó, nincs jelszava, default port, adatbázis neve) A Xamppnak futnia kell, és tartalmaznia az oldtimer nevű adatbázist nyilván az adatokkal együtt! Ezzel a rövid kóddal megpróbálunk csatlakozni az adatbázishoz, hibakezeléssel együtt.

using System;
using MySql.Data.MySqlClient;

namespace ConsoleAppSql
{
    class Program
    {
        static void Main(string[] args)
        {
            string kapcsolat = "server=127.0.0.1;" +
                "port=3306;" +
                "username=root;" +
                "password=;" +
                "database=oldtimer;" +
                "Connection Timeout=10;";
            MySqlConnection csatlakozas = new MySqlConnection(kapcsolat);
            try
            {                
                csatlakozas.Open();
                Console.WriteLine("Sikeres csatlakozás!");
            }
            catch (MySql.Data.MySqlClient.MySqlException)
            {Console.WriteLine("Sikeretelen csatlakozás!");}
            Console.ReadKey();
            }
    }
}
/* Ha a konkrét hibaüzenetet akarod kiíratni cseréld le erre :
catch (MySql.Data.MySqlClient.MySqlException e)
            { nsole.WriteLine(e.Message)}
*/

Első lekérdezésnünk. Egy változóba – sql_parancs- beírjuk a konkrét sql kódot. Utána használjuk a MySqlCommand osztályt, ez fogja végrehajtani az sql utasítást. Az eredmény kiolvasásához a MySqlDataReader osztályt használjuk, az sql parancs lefuttatásához pedig az ExecuteReader() függvényt . 1db adatot várunk eredménynek., amihez a kiolvas1 változón keresztül férünk hozzá, ennek a 0. eleme lesz amit ki akarunk iratni.

string sql_parancs = "SELECT COUNT(id) AS 'sportautok-szama' FROM autok WHERE kategoriaId=4;"; // SQL
                MySqlCommand lekerdezes_1 = new MySqlCommand(sql_parancs, csatlakozas);
                MySqlDataReader kiolvas1 = lekerdezes_1.ExecuteReader();
                while (kiolvas1.Read())
                {
                    Console.WriteLine("1. lekérdezés: {0} db sportautó van", kiolvas1[0].ToString());
                    //Console.WriteLine("{0} -- {1}", reader[0].ToString(), reader[1].ToString());
                 }

Második lekérdezésünk: irasd ki a limuzinok nevét, színét! A megoldás nagyon hasonlít az előzőre, csak itt 2 adatot várunk.

/*Listázza ki az összes “Limuzin” kategóriába tartozó autó nevét és színét! Rendezze őket névsorba! A lekérdezés során a kategória kijelölését “Limuzin” név felhasználásával tegye! */
                csatlakozas.Open();
                string sql_parancs2 = "SELECT autok.nev, autok.szin FROM autok INNER JOIN kategoriak ON autok.kategoriaId = kategoriak.id WHERE kategoriak.nev = 'Limuzin' ORDER BY autok.nev;"; // SQL
                MySqlCommand lekerdezes_2 = new MySqlCommand(sql_parancs2, csatlakozas);
                MySqlDataReader kiolvas2 = lekerdezes_2.ExecuteReader();
                Console.WriteLine("2.lekérdezés: Az adatbázisban ezek a limuzinok találhatók meg:");
                while (kiolvas2.Read())
                {
                    Console.WriteLine("{0} -- {1}", kiolvas2[0].ToString(), kiolvas2[1].ToString());
                }
                csatlakozas.Close();

Insert into – új rekord felvétele az adatbázisba. Itt az ExecuteNonQuery() függvényt használjuk a lekérdezés futtatásához. Ezt a függvényt lefuttatja az sql parancsot, és megadja, hány sort illesztett be. Nyilván, ha ez 0, akkor nem történt meg az új rekord beszúrása a táblába.

csatlakozas.Open();
                string sql_parancs3 = "INSERT INTO autok (rendszam, szin, kategoriaId, nev, evjarat, ar) VALUES ('OT45-02', 'Piros', 3, 'Pontiac', 1980, 18000)"; // SQL sintaktika
                MySqlCommand beszuro_lekerdezes = new MySqlCommand(sql_parancs3, csatlakozas);
                
                int rowCount = 0;
                rowCount = beszuro_lekerdezes.ExecuteNonQuery(); //ha sikerül új rekordot hozzáadni akkor 0-nál nagyobb az értéke
                if (rowCount < 1)
                { Console.WriteLine("Nem sikerült a rekord hozzáadása!"); }
                else
                { Console.WriteLine("Sikerült a rekord hozzáadása!"); }

                csatlakozas.Close();