[[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)