Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:csharp:dotnetcore:mariadb

< .Net Core

.Net Core - MariaDB

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:

<PackageReference Include="MySqlConnector" Version="2.3.1" />

A teljes állomány:

app01.csproj
<Project Sdk="Microsoft.NET.Sdk">
 
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net7.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
 
  <ItemGroup>
    <PackageReference Include="MySqlConnector" Version="2.3.1" />
  </ItemGroup>
 
</Project>
NuGet csomagtároló: https://www.nuget.org/

Kapcsolódás

Program.cs
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

Program.cs
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

Program.cs
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

Program.cs
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:

Adatbázis

create.sql
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

Program.cs
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

Program.cs
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

Program.cs
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

Program.cs
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

Linkek

oktatas/programozas/csharp/dotnetcore/mariadb.txt · Utolsó módosítás: 2024/06/01 17:44 szerkesztette: admin