Tartalomjegyzék
CSharp adatbázis-kezelés
- Szerző: Sallai András
- Copyright © 2010, Sallai András
- Szerkesztve: 2024
- Licenc: Licenc: CC BY-SA 4.0
- Web: https://szit.hu
Szükséges plusz program
Microsoft Access Database Engine 2010:
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:
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
- Program.cs
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:
- Program.cs
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
- Program.cs
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
- Program.cs
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:
- Program.cs
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
- Program.cs
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
- Program.cs
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:
- dolgozok.xml
<DocumentElement> <Dolgozók> <az>1</az> <nev>Nagy József</nev> <fizetes>870000</fizetes> </Dolgozók> <Dolgozók> <az>2</az> <nev>Kis Péter</nev> <fizetes>275000</fizetes> </Dolgozók> <Dolgozók> <az>3</az> <nev>Esze Tamás</nev> <fizetes>354000</fizetes> </Dolgozók> <Dolgozók> <az>4</az> <nev>Pék Klára</nev> <fizetes>175000</fizetes> </Dolgozók> <Dolgozók> <az>5</az> <nev>Fes Irén</nev> <fizetes>443500</fizetes> </Dolgozók> </DocumentElement>
Rendezés
- Program.cs
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"]); } }