[[:oktatas:programozás:csharp|< CSharp]]
====== CSharp adatbázis-kezelés ======
* **Szerző:** Sallai András
* Copyright (c) 2010, Sallai András
* Szerkesztve: 2024
* Licenc: Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]]
* Web: https://szit.hu
===== Szükséges plusz program =====
Microsoft Access Database Engine 2010:
* http://www.microsoft.com/download/en/details.aspx?id=13255
===== Access 2003 (mdb) kezelése =====
Szükségünk van egy kapcsolat- és olvasóobjektumra. A kapcsolatot a Jet adatbázismotorral
hozzuk létre.
using System;
using System.Data.OleDb;
using System.Data;
class Program
{
public static void Main()
{
OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=cd2.mdb;User Id=admin;Password=;");
string sql = "SELECT * FROM cd";
OleDbCommand com = new OleDbCommand(sql, con);
com.CommandType = CommandType.Text;
con.Open();
//~ com.CommandText = "SELECT * FROM cd";
//~ com.CommandText = "SELECT * FROM user";
OleDbDataReader adat = com.ExecuteReader();
while(adat.Read())
{
Console.WriteLine(adat.GetValue(1));
}
con.Close();
}
}
A GetValue(1) metódus az eredményhalmazból a második oszlopot adja.
A lekérdezést megadhatom a com objektum CommandText tulajdonságaként is:
using System;
using System.Data.OleDb;
using System.Data;
class Program
{
public static void Main()
{
OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=cd2.mdb;User Id=admin;Password=;");
string sql = "SELECT * FROM cd";
OleDbCommand com = new OleDbCommand("", con);
com.CommandType = CommandType.Text;
con.Open();
com.CommandText = sql;
OleDbDataReader adat = com.ExecuteReader();
while(adat.Read())
{
Console.WriteLine(adat.GetValue(1));
}
con.Close();
}
}
===== Access 2007 (accdb) kezelése =====
using System;
using System.Data.OleDb;
using System.Data;
class Program
{
public static void Main()
{
OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=cd2.accdb;Persist Security Info=False;");
string sql = "SELECT * FROM cd";
OleDbCommand com = new OleDbCommand(sql, con);
com.CommandType = CommandType.Text;
con.Open();
OleDbDataReader adat = com.ExecuteReader();
while(adat.Read())
{
Console.WriteLine(adat.GetValue(1));
}
con.Close();
}
}
===== MySQL adatbázis kezelése =====
==== Szükséges ====
Szükségünk van a következő .dll állományra:
mysql.data.dll
Ez beszerezhető innen:
* http://dev.mysql.com/downloads/connector/net/
A .NET & Mono választottam:
Select platform:
.NET & Mono
==== Fordítás ====
A fordító parancssorba:
/r:mysql.data.dll
A teljes sor nálam így néz ki 4.0-ás keretrendsznél:
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\csc /t:exe $(FileNameExt) /r:system.dll,system.drawing.dll /r:mysql.data.dll
A SWScite programban:
command.compile.*.cs=C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\csc /t:exe $(FileNameExt) /r:system.dll,system.drawing.dll /r:mysql.data.dll
==== Kapcsolódás ====
using System;
using MySql.Data;
using MySql.Data.MySqlClient;
class Program
{
static void Main()
{
string connStr = "server=localhost;user=root;database=test;port=3306;password=;";
MySqlConnection conn = new MySqlConnection(connStr);
try {
Console.WriteLine("Connecting to MySQL...");
conn.Open();
// Adatbázis műveletek végrehajtása
} catch (Exception ex) {
Console.WriteLine(ex.ToString());
}
conn.Close();
Console.WriteLine("Done.");
}
}
==== Lekérdezés ====
Adott az alábbi tábla a VigZrt adatbázisban:
^ id ^ nev ^ telepules ^ cim ^ fizetes ^ szuletes ^ hazas ^
A lekérdezés a következő lehet:
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
public class Program
{
public static void Main()
{
string connStr = "server=localhost;user=root;database=VigZrt;port=3306;password=;";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string sql = "SELECT nev, telepules FROM Szemely";
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine(rdr[0]+" -- "+rdr[1]);
}
rdr.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
Console.WriteLine("Done.");
}
}
==== Beszúrás ====
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
public class Program
{
public static void Main()
{
string connStr = "server=localhost;user=root;database=VigZrt;port=3306;password=;";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string sql = "INSERT INTO Szemely (nev, telepules, cim, fizetes, szuletes, hazas) VALUES ('Felegi Lajos','Szeged', 'Tűz u. 400.', 372000, '1970-01-05', 0)";
MySqlCommand cmd = new MySqlCommand(sql, conn);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
Console.WriteLine("Done.");
}
}
==== Számol ====
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
public class Program
{
public static void Main()
{
string connStr = "server=localhost;user=root;database=VigZrt;port=3306;password=;";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string sql = "SELECT COUNT(*) FROM Szemely WHERE hazas=0";
MySqlCommand cmd = new MySqlCommand(sql, conn);
object result = cmd.ExecuteScalar();
if (result != null)
{
int r = Convert.ToInt32(result);
Console.WriteLine("Nem házasasok száma: " + r);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
Console.WriteLine("Done.");
}
}
===== Függelék =====
==== DataTable kezelése ====
A példában egy direkt módon feltöltött DataTable objektumot használok.
Az adatok persze normál esetben adatbázisból jönnek:
using System;
using System.Data;
class Program
{
public static void Main()
{
//Készítek egy DataTable objektumot:
DataTable dolgozok = new DataTable();
dolgozok.Columns.Add("az", typeof(int));
dolgozok.Columns.Add("nev", typeof(string));
dolgozok.Columns.Add("fizetes", typeof(double));
//Hozzáadok rekordokat:
dolgozok.Rows.Add(1, "Nagy József", 870000);
dolgozok.Rows.Add(2, "Kis Péter", 275000);
dolgozok.Rows.Add(3, "Esze Tamás", 354000);
dolgozok.Rows.Add(4, "Pék Klára", 175000);
dolgozok.Rows.Add(5, "Fes Irén", 443500);
//Hozzáférés a sorokhoz iterációval:
foreach(DataRow sor in dolgozok.Rows)
Console.WriteLine(sor["az"] + "\t" + sor["nev"] + "\t" + sor["fizetes"]);
Console.WriteLine();
//Hozzáférés a sorokhoz direktben:
Console.WriteLine(dolgozok.Rows[0]["az"] + "\t" + dolgozok.Rows[0]["nev"] + "\t" + dolgozok.Rows[0]["fizetes"]);
Console.WriteLine(dolgozok.Rows[1]["az"] + "\t" + dolgozok.Rows[1]["nev"] + "\t" + dolgozok.Rows[1]["fizetes"]);
}
}
==== DataTable függvényei ====
using System;
using System.Data;
class Program
{
public static void Main()
{
//Készítek egy DataTable objektumot:
DataTable dolgozok = new DataTable();
dolgozok.Columns.Add("az", typeof(int));
dolgozok.Columns.Add("nev", typeof(string));
dolgozok.Columns.Add("fizetes", typeof(double));
//Hozzáadok rekordokat:
dolgozok.Rows.Add(1, "Nagy József", 870000);
dolgozok.Rows.Add(2, "Kis Péter", 275000);
dolgozok.Rows.Add(3, "Esze Tamás", 354000);
dolgozok.Rows.Add(4, "Pék Klára", 175000);
dolgozok.Rows.Add(5, "Fes Irén", 443500);
//Függvények használata:
Console.WriteLine("Átlag: " + dolgozok.Compute("Avg(fizetes)", String.Empty));
Console.WriteLine("Összeg: " + dolgozok.Compute("Sum(fizetes)", String.Empty));
Console.WriteLine("Max: " + dolgozok.Compute("Max(fizetes)", String.Empty));
Console.WriteLine("Min: " + dolgozok.Compute("Min(fizetes)", String.Empty));
Console.WriteLine("Dolgozók száma: " + dolgozok.Compute("Count(az)", String.Empty));
}
}
==== Mentés XML formátumba ====
using System;
using System.Data;
class Program
{
public static void Main()
{
//Készítek egy DataTable objektumot:
DataTable dolgozok = new DataTable("Dolgozók");
dolgozok.Columns.Add("az", typeof(int));
dolgozok.Columns.Add("nev", typeof(string));
dolgozok.Columns.Add("fizetes", typeof(double));
//Hozzáadok rekordokat:
dolgozok.Rows.Add(1, "Nagy József", 870000);
dolgozok.Rows.Add(2, "Kis Péter", 275000);
dolgozok.Rows.Add(3, "Esze Tamás", 354000);
dolgozok.Rows.Add(4, "Pék Klára", 175000);
dolgozok.Rows.Add(5, "Fes Irén", 443500);
//Mentés XML formátumba:
dolgozok.WriteXml(@"dolgozok.xml");
Console.WriteLine("XML formátuban kiírva.");
}
}
Ügyeljünk arra, hogy a DataTabla() konstruktor hívásakor, kötelező megadni a tábla nevét paraméterként,
ha XML formátumba szeretnénk menteni.
Eredmény:
1
Nagy József
870000
2
Kis Péter
275000
3
Esze Tamás
354000
4
Pék Klára
175000
5
Fes Irén
443500
==== Rendezés ====
using System;
using System.Data;
class Program
{
public static void Main()
{
//Készítek egy DataTable objektumot:
DataTable dolgozok = new DataTable("Dolgozók");
dolgozok.Columns.Add("az", typeof(int));
dolgozok.Columns.Add("nev", typeof(string));
dolgozok.Columns.Add("fizetes", typeof(double));
//Hozzáadok rekordokat:
dolgozok.Rows.Add(1, "Nagy József", 870000);
dolgozok.Rows.Add(2, "Kis Péter", 275000);
dolgozok.Rows.Add(3, "Esze Tamás", 354000);
dolgozok.Rows.Add(4, "Pék Klára", 175000);
dolgozok.Rows.Add(5, "Fes Irén", 443500);
//Rendezés csökkenő sorrendbe:
DataRow[] sorok = dolgozok.Select(String.Empty, "fizetes desc");
//Rendezett eredmény kiíratása:
foreach(DataRow sor in sorok)
Console.WriteLine(sor["az"] + "\t" + sor["nev"] + "\t" + sor["fizetes"]);
}
}
===== Linkek =====
* http://www.java2s.com/Code/CSharp/Database-ADO.net/CatalogDatabase-ADO.net.htm (2024)