Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:csharp:adatbazis-kezeles

< CSharp

CSharp adatbázis-kezelés

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"]);
 
	}
}

Linkek

oktatas/programozas/csharp/adatbazis-kezeles.txt · Utolsó módosítás: 2024/06/01 17:43 szerkesztette: admin