[[oktatas:programozás:csharp:dotnetcore|< .Net Core]] ====== .Net Core - MariaDB ====== * **Szerző:** Sallai András * Copyright (c) 2023, Sallai András * Szerkesztve: 2024 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: https://szit.hu ===== Névtér és osztályok ===== Névtér: * MySqlConnector A következő osztályokat használjuk: * MySqlConnection - Kapcsolatobjektum létrehozása. * MySqlCommand - A lekérés létrehozása. * MySqlDataReader - Lekérés indítása. * MySqlException - Hibakezelés. ===== Projekt létrehozása ===== Hozzunk létre egy konzolos projektet: mkdir app01 cd app01 dotnet new console ===== Függőség telepítése ===== Telepítsük a projektbe a MySqlConnector csomagot: dotnet add package MySqlConnector Szokták ajánlani a MySql.Data csomagot is. MariaDB esetén apró problémák léphetnek fel. Ha nem megfelelő csomagot telepítettünk, a törlés: dotnet remove package MySql.Data Ellenőrizzük a **app01.csproj** fájlban: A teljes állomány: Exe net7.0 enable enable NuGet csomagtároló: https://www.nuget.org/ ===== Kapcsolódás ===== using MySqlConnector; string host="localhost"; string name="konyvesbolt"; string user="konyvesbolt"; string pass="titok"; Console.WriteLine("Kapcsolódás..."); string url = $"Server={host};Database={name};User ID={user};Password={pass};"; using MySqlConnection conn = new MySqlConnection(url); try { conn.Open(); }catch (MySqlException e) { Console.Error.WriteLine("Hiba! A kapcsolódás sikertelen!"); Console.Error.WriteLine(e.Message); } ===== Apró változtatások ===== using MySqlConnector; string host="localhost"; string name="libes"; string user="libes"; string pass="titok"; string url = @$" Server={host}; Database={name}; User ID={user}; Password={pass}; "; MySqlConnection conn = new(url); try { conn.Open(); Console.WriteLine("Ok"); }catch(MySqlException e) { Console.Error.WriteLine("Hiba! A kapcsolódás sikertelen!"); Console.Error.WriteLine(e.Message); } Port megadása: string host="localhost"; string port="3307"; string name="libes"; string user="libes"; string pass="titok"; string url = @$" Server={host}; Port={port}; Database={name}; User ID={user}; Password={pass}; "; ===== Futtatás ===== dotnet run ===== Az összes adat lekérdezése ===== using MySqlConnector; string host="localhost"; string name="konyvesbolt"; string user="konyvesbolt"; string pass="titok"; Console.WriteLine("Kapcsolódás..."); string url = $"Server={host};Database={name};User ID={user};Password={pass};"; using MySqlConnection conn = new MySqlConnection(url); try { conn.Open(); string sql = "select * from konyvek"; using MySqlCommand cmd = new MySqlCommand(sql, conn); using MySqlDataReader reader = cmd.ExecuteReader(); while(reader.Read()) { if(!reader.IsDBNull(reader.GetOrdinal("cim"))) { string value = reader.GetString("cim"); Console.WriteLine(value); }else { Console.WriteLine("Az érték NULL"); } } }catch (MySqlException e) { Console.Error.WriteLine("Hiba! A kapcsolódás sikertelen!"); Console.Error.WriteLine(e.Message); } ===== Új adatok felvétele ===== using MySqlConnector; string host="localhost"; string name="konyvesbolt"; string user="konyvesbolt"; string pass="titok"; Console.WriteLine("Kapcsolódás..."); string url = $"Server={host};Database={name};User ID={user};Password={pass};"; using MySqlConnection conn = new MySqlConnection(url); try { conn.Open(); string sql = "insert into konyvek (cim, szerzo) values (@cim, @szerzo)"; using MySqlCommand cmd = new MySqlCommand(sql, conn); cmd.Parameters.AddWithValue("cim", "A gép"); cmd.Parameters.AddWithValue("szerzo", "Fitos Ferenc"); cmd.ExecuteNonQuery(); } catch (MySqlException e) { Console.Error.WriteLine("Hiba! A kapcsolódás sikertelen!"); Console.Error.WriteLine(e.Message); } ===== Dolgozók példa ===== Minta projekt .Net Core-ban írva: * https://github.com/oktat/csharpEmployeeDb ==== Adatbázis ==== create database zoldzrt; create table employees( id int not null primary key auto_increment, name varchar(50), city varchar(50), salary double ); grant all privileges on zoldzrt.* to zoldzrt@localhost identified by 'titok'; ==== Create művelet ==== using MySqlConnector; string host = "localhost"; string name = "zoldzrt"; string user = "zoldzrt"; string pass = "titok"; string connstr = $"Server={host};Database={name};User ID={user};Password={pass};"; using MySqlConnection conn = new(connstr); try { conn.Open(); string sql = "insert into employees (name, city, salary) values (@name, @city, @salary)"; using MySqlCommand cmd = new MySqlCommand(sql, conn); cmd.Parameters.AddWithValue("name", "Toros Ernő"); cmd.Parameters.AddWithValue("city", "Szeged"); cmd.Parameters.AddWithValue("salary", 393); int rowsAffected = cmd.ExecuteNonQuery(); Console.WriteLine($"Érintett sorok száma: {rowsAffected}"); }catch(MySqlException e) { Console.Error.WriteLine("Hiba! A beszúrás sikeretelen!"); Console.Error.WriteLine(e.Message); } ==== Read művelet ==== using MySqlConnector; string host = "localhost"; string name = "zoldzrt"; string user = "zoldzrt"; string pass = "titok"; string connstr = $"Server={host};Database={name};User ID={user};Password={pass};"; using MySqlConnection conn = new(connstr); try { conn.Open(); string sql = "select * from employees"; using MySqlCommand cmd = new(sql, conn); using MySqlDataReader reader = cmd.ExecuteReader(); while(reader.Read()) { Console.WriteLine($"{reader["name"]}\t{reader["city"]}"); } }catch(MySqlException e) { Console.Error.WriteLine("Hiba! A lekérdezés sikeretelen!"); Console.Error.WriteLine(e.Message); } ==== Update művelet ==== using MySqlConnector; string host = "localhost"; string name = "zoldzrt"; string user = "zoldzrt"; string pass = "titok"; string connstr = $"Server={host};Database={name};User ID={user};Password={pass};"; using MySqlConnection conn = new(connstr); try { conn.Open(); string sql = "update employees set name=@name, city=@city where id=@id"; using MySqlCommand cmd = new MySqlCommand(sql, conn); cmd.Parameters.AddWithValue("id", 3); cmd.Parameters.AddWithValue("name", "Cserép Tibor"); cmd.Parameters.AddWithValue("city", "Hatvan"); int rowsAffected = cmd.ExecuteNonQuery(); Console.WriteLine($"Érintett sorok száma: {rowsAffected}"); }catch(MySqlException e) { Console.Error.WriteLine("Hiba! A frissítés sikeretelen!"); Console.Error.WriteLine(e.Message); } ==== Delete művelet ==== using MySqlConnector; string host = "localhost"; string name = "zoldzrt"; string user = "zoldzrt"; string pass = "titok"; string connstr = $"Server={host};Database={name};User ID={user};Password={pass};"; using MySqlConnection conn = new(connstr); try { conn.Open(); string sql = "delete from employee where id=@id"; using MySqlCommand cmd = new MySqlCommand(sql, conn); cmd.Parameters.AddWithValue("id", 4); int rowsAffected = cmd.ExecuteNonQuery(); Console.WriteLine($"Érintett sorok száma: {rowsAffected}"); }catch(MySqlException e) { Console.Error.WriteLine("Hiba! A törlés sikeretelen!"); Console.Error.WriteLine(e.Message); } ===== Dátumok ===== Ha dátumokkal dolgozunk, szükségünk van kapcsolati sztringben még egy beállításra. A Convert Zero DateTime legyen True-ra állítva: string connStr = @$" Server={host}; Database={name}; User={user}; Password={pass}; Convert Zero Datetime=True "; A modellben ekkor három típust használhatunk: * DateOnly * DateTime * MySqlDateTime public class Employee { public int Id {set; get;} public DateOnly Birth {get; set;} } public class Employee { public int Id {set; get;} public DateTime Birth {get; set;} } public class Employee { public int Id {set; get;} public MySqlDateTime Birth {get; set;} } A MySqlReader osztály használata esetén a fentieknek megfelelően két metódust használhatunk: Ha modellben DateOnly típust használunk: reader.GetDateOnly("Birth"); Ha modellben DateTime típust használunk: reader.GetDateTime("Birth"); Ha modellben MySqlDateTime típust használunk: reader.GetMySqlDateTime("Birth"); ===== Lásd még ===== * https://github.com/oktat/konyvesbolt.git (2023) ===== Linkek ===== * https://mysqlconnector.net/tutorials/basic-api/ (2023) * [[https://mysqlconnector.net/api/mysqlconnectorassembly/|mysqlconnectorassembly]] (MySqlConnector névtér) * [[https://mysqlconnector.net/api/mysqlconnector/mysqlconnectiontype/|mysqlconnectiontype]] (MySqlConnection osztály) * [[https://mysqlconnector.net/api/mysqlconnector/mysqlcommandtype/|mysqlcommandtype]] (MySqlCommand osztály) * [[https://mysqlconnector.net/api/mysqlconnector/mysqlexceptiontype/|mysqlexceptiontype]] (MySqlException osztály)