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.
![](https://www.viktortaylor.eu/wp-content/uploads/2022/11/nuget_01-1024x658.jpg)
![](https://www.viktortaylor.eu/wp-content/uploads/2022/11/nuget_02-1024x543.jpg)
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
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.
1 2 3 4 5 6 7 8 |
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.
1 2 3 4 5 6 7 8 9 10 11 |
/*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.
1 2 3 4 5 6 7 8 9 10 11 12 |
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(); |