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