Adatbázis rendszerek II. Adatbázis elérése C# kliens programból ADO.NET API-n keresztül

Hasonló dokumentumok
Adatbázisok I. Jánosi-Rancz Katalin Tünde 327A 1-1

Adatbázis Rendszerek II. 2. Ea: Gyakorló környezet

Adatbázis Rendszerek II. 2. Gyakorló környezet

MDAC - Microsoft Data Access Components

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Excel ODBC-ADO API. Tevékenységpontok: - DBMS telepítés. - ODBC driver telepítése. - DSN létrehozatala. -Excel-ben ADO bevonása

Adatbázisok webalkalmazásokban

Adatbázis Rendszerek II. 1. SQL programozási felületek 39/1B IT MAN

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

Adatbázis-kezelés ODBC driverrel

A.NET keretrendszer (.NET Framework) három alapvetõ összetevõbõl áll:

OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk.

Webes alkalmazások fejlesztése 3. előadás. Objektumrelációs adatkezelés (ASP.NET)

Adatbázis Rendszerek II. 8. Gyakorló környezet

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelés ActiveX vezérlıkkel - 1

Vizuális programozás gyakorlat

B I T M A N B I v: T M A N

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

Tranzakciókezelés PL/SQL-ben


WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

Java programozási nyelv 11. rész Adatbázis-programozás

Hozzunk létre két rekordot a táblában, majd véglegesítsünk (commit):

Kliens oldali SQL-API

Access adatbázis elérése OLE DB-n keresztül

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

Eseményvezérelt alkalmazások fejlesztése II 10. előadás. Objektumrelációs adatkezelés (Entity Framework) Cserép Máté

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

eseményvezérelt megoldások Vizuális programozás 5. előadás

Széchenyi István Egyetem

A könyv tartalomjegyzéke

Webes alkalmazások fejlesztése 3. előadás. Objektumrelációs adatkezelés (Entity Framework) Cserép Máté

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Alkalmazás technológiai frissítés migrációs és üzemeltetési tapasztalatok

Adatbázis-kezelés. Harmadik előadás

Debreceni Egyetem Informatikai Kar TANULÓI NYILVÁNTARTÓ SZOFTVER FIREBIRD ADATBÁZIS ALKALMAZÁSÁVAL

Webes alkalmazások fejlesztése 3. előadás. Objektumrelációs adatkezelés (Entity Framework) Cserép Máté.

Az SQL*Plus használata

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

Készítette: Szabóné Nacsa Rozália

Webszolgáltatások készítése.net alapokon -

Database Systems II. ZH összefoglaló

Informatika terméktervezőknek

Adatbázis használata PHP-ből

INFORMATIKAI ALAPISMERETEK

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Csomag. Adatbázis-objektum Programozási eszközök gyűjteménye Két részből áll. specifikáció törzs (opcionális)

PL/SQL (folytatás) Kurzorok, függvények, eljárások

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

Adatbáziskezelés Delphi 5 alatt. Bese Antal

Adatbázis rendszerek SQL nyomkövetés

Kalmár György Adatbázis alapú rendszerek

B IT MAN 65/1. Adatbázis Rendszerek II. Ellenőrző kérdések APLSQL B IT MAN. v:

Az indexelés újdonságai Oracle Database 12c R1 és 12c R2

IBM WebSphere Adapters 7. változat 5. alváltozat. IBM WebSphere Adapter for Oracle E-Business Suite felhasználói kézikönyv 7. változat 5.

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Oracle Audit Vault and Database Firewall. Gecseg Gyula Oracle DBA

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

Megtanuljuk, hogyan lehet egy web-alkalmazással adatbázishoz csatlakozni Pontosan megnézzük a PHP lehetőségeit o MySQL-hez o Oracle-höz

C#---Access adatbáziskezelési gyakorlat

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Bevezetés: az SQL-be

Adatbáziskezelés php-ben MySQL adatbáziskezelı rendszert használva

A Microsoft Visual Studio 2005 fejlesztőkörnyezet

Java és web programozás

BEVEZETÉS Az objektum fogalma

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

5. téma XML DB. Az adatkezelés és XML kapcsolata. Miért fontos az XML használata az adatbázis kezelésben?

ORACLE. SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Elemi alkalmazások fejlesztése IV.

Entity Framework alapú adatbáziselérés

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

SQLServer. Védelmi struktúra

Tartalom. Történeti áttekintés. Történeti áttekintés Architektúra DCOM vs CORBA. Szoftvertechnológia

Adatbázis kezelés Delphiben. SQL lekérdezések

AdoDB a gyakorlatban

JAVA PROGRAMOZÁS 8.ELŐADÁS

Java és web programozás

Táblakezelés: Open SQL Internal table. Tarcsi Ádám: Az SAP programozása 1.

Adatbázisok II. Jánosi-Rancz Katalin Tünde 327A 1-1

INFORMATIKAI ALAPISMERETEK

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

Entity Framework alapú adatbáziselérés

Adatbázisok* tulajdonságai

Osztályok. 4. gyakorlat

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

PRECÍZ Információs füzetek

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

Adatbázis kezelés alapjai I.

Entity Framework + LINQ oktatási segédlet

JNDI - alapok. Java Naming and Directory Interface

DCOM Áttekintés. Miskolci Egyetem Általános Informatikai Tanszék. Ficsor Lajos DCOM /1

Adatbázisok kliens-szerver arhitektúrája. Copyright, 1996 Dale Carnegie & Associates, Inc.

Webszolgáltatás és XML alapú adatbázis. 1. Az adatbázis megtervezése

Átírás:

Adatbázis rendszerek II. Adatbázis elérése C# kliens programból ADO.NET API-n keresztül Adatbázis elérés lehetőségei absztrakciós rétegen keresztül: - Open DataBase Connectivity (ODBC), közös függvényhalmaz, amivel minden DB elérhető. Az ODBC rétegben lévő driverek lefordítják. - Object Linking and Embedding (OLE DB): táblázatos formában mutatja az adatokat. Az adatforrások OLE DB provider-eken keresztül érhetők el COM objektumok segítségével. ODBC-t is elér. - ActiveX Data Objects (ADO): egy vékony réteg az OLE DB felett, a magas szintű nyelvek számára elérhetővé teszi azt. - ADO.NET: ADO továbbfejlesztett, felügyelt változata. ADO.NET: ADO továbbfejlesztett, felügyelt változata. A.NET adatbáziskezelési osztálygyűjteménye. Névtér: System.Data Data provider (adatszolgáltató): híd az alkalmazás és az adatforrás között. Ezen keresztül mozognak az adatok az alkalmazás és az adatbázis között. Microsoft adatszolgáltatók: SqlClient (MS SQL Server), OracleClient (Oracle), OleDb (Access), Odbc. Oracle Data Provider for.net: http://www.oracle.com/technetwork/topics/dotnet/downloads/index.html Kapcsolat alapú adatelérés: Adatbázis-kezelés lépései kliens programból: 1. Adatbázis kapcsolat létesítése ConnectionString: a kapcsolat beállításai (szerver, felhasználónév, jelszó) Connection objektum: ezen keresztül kommunikál az alkalmazás az adatbázissal OracleConnection: Oracle adatbázis eléréshez használható Connection típus 2. Adatbázis műveletek végrehajtása Command objektum: ezen keresztül adhatók meg a végrehajtandó SQL parancsok OracleCommand: Command típus, Oracle adatbáziskezelés esetén használható osztály Parameters tulajdonság: az SQL parancsok vagy tárolt eljárások bemenő és kimenő paraméterei ExecuteReader metódus: SQL lekérdezés végrehajtása ExecuteNonQuery metódus: SQL írási művelet végrehajtása DataReader objektum: lekérdező művelet esetén az adatbázisból visszakapott eredmény rekord adatfolyam. Gyors elérésű, csak előre irányban feldolgozható szerver oldali kurzor. Az aktuális sor egyes oszlopaiban tárolt adatokat a típusuk szerinti Get metódusokkal lehet lekérdezni. 3. Adatbázis kapcsolat lezárása

Oracle adatbázis kezeléshez a Data Provider letöltése és telepítése után hozzá kell adni a C# projektünkhöz a System.Data.OracleClient DLL-t. Ehhez a Projekt/Hivatkozás hozzáadása (Project/Add reference) menüpontban a.net szerelvény böngésző (.NET Assembly Browser) fül alatt tallózni kell a DLL le-t és hozzáadni. Ezután elérhető a DLL file tartalma. Érdemes using segítségével hozzáadni a DLL névterét, majd az egyes statikus metódusokra az osztálynév segítségével hivatkozhatunk. Windows Forms alkalmazás (Visual Studio 2008) példa: https://docs.oracle.com/cd/b28359_01/appdev.111/b28844/connecting.htm#tdpng30000 Adatbázis kapcsolat létesítés: using System; using System.Data.OracleClient; namespace Abkezel_demo class OraTest private OracleConnection con; Console Application feladatsor (Visual Studio 2015) void Connect() con = new OracleConnection(); con.connectionstring = "User Id=...; Password=...; Data Source = 193.6.5.58"; con.open(); Console.WriteLine("Connected to Oracle" + con.serverversion); Adatbázis kapcsolat bontás: void Close() con.close(); con.dispose(); Console.WriteLine("Sikeres kapcsolatbontás");

Adatbázis-kezelő műveletek: I. Paraméter nélküli utasítások I/1 Tábla létrehozása void CreateTable() command.commandtext = "CREATE TABLE auto_c# (rsz char(6) " + "primary key, tipus char(10) not null, szin char(10) default 'piros', " + "evjarat number(4), ar number(8) check (ar>0) )"; Console.WriteLine("Sikeres auto_c# tábla létrehozás"); I/2 Adatok feltöltése void InsertData() command.commandtext = "INSERT INTO auto_c# VALUES ('abc123', " + " 'mazda', 'fekete', 2012, 1650000)"; Console.WriteLine("Sikeres adatfelvitel"); string[ ] sql_stmts = new string[3] "INSERT INTO auto_c# VALUES('aaa111','opel','fekete',2014,1850000)", "INSERT INTO auto_c# VALUES('aaa222','skoda',null,2014,1850000)", "INSERT INTO auto_c# (rsz, tipus, evjarat, ar) VALUES ('aaa333','mazda',2014,1850000)" ; for (int i=0; i<sql_stmts.length; i++) command.commandtext = sql_stmts[i]; Console.WriteLine("Sikeres adatfelvitel");

I/3 Adatok lekérdezése void SelectData() command.commandtext = "SELECT * FROM auto_c#"; OracleDataReader reader = command.executereader(); if (reader.hasrows) while (reader.read()) OracleString rsz = reader.getoraclestring(0); Console.Write(rsz.ToString() + " "); OracleString tipus = reader.getoraclestring(1); Console.Write(tipus.ToString() + " "); OracleString szin = reader.getoraclestring(2); Console.Write(szin.ToString() + " "); OracleNumber evjarat = reader.getoraclenumber(3); Console.Write(evjarat.ToString() + " "); OracleNumber ar = reader.getoraclenumber(4); Console.WriteLine(ar.ToString() + " "); //Dátum típusú mező esetén //OracleDateTime d = reader.getoracledatetime(mezőindex); //Console.WriteLine(d.ToString()); else Console.WriteLine("No rows found"); reader.close();

II. Paraméteres utasítások, ahol a paraméterek kötött változók. II/1 Paraméteres adatfelvitel void ParametrizedInsert() string cmdtext = "INSERT INTO auto_c# VALUES (:rsz, :tipus, :szin, :evjarat, :ar)"; OracleCommand command = new OracleCommand(cmdText, con); Console.WriteLine("Paraméteres adatfelvitel"); Console.Write("Rendszám: "); string c_rsz = Console.ReadLine(); Console.Write("Típus: "); string c_tipus = Console.ReadLine(); Console.Write("Szín: "); string c_szin = Console.ReadLine(); Console.Write("Évjárat: "); string c_evjarat = Console.ReadLine(); Console.Write("Ár: "); string c_ar = Console.ReadLine(); /* Paraméterek és változók kötése */ command.parameters.add(new OracleParameter("rsz", c_rsz)); command.parameters.add(new OracleParameter("tipus", c_tipus)); command.parameters.add(new OracleParameter("szin", c_szin)); command.parameters.add(new OracleParameter("evjarat", c_evjarat)); command.parameters.add(new OracleParameter("ar", c_ar)); // Ha a nem string típusú adatok típusát konvertáljuk /* int c_evjarat = Int16.Parse(Console.ReadLine()); double c_ar = double.parse(console.readline()); command.parameters.add("evjarat", OracleType.Int16); command.parameters["evjarat"].value = c_evjarat; command.parameters.add("ar", OracleType.Double); command.parameters["ar"].value = c_ar; */ Console.WriteLine("Sikeres paraméteres adatfelvitel"); catch(exception ex) II/2 Paraméteres lekérdezés void ParametrizedQuery() string cmdtext = "SELECT * FROM auto_c# where trim(tipus) = :c_tip and ar > :c_ar"; OracleCommand command = new OracleCommand(cmdText, con); //co command.parameters.add(new OracleParameter("c_tip", "mazda")); //command.parameters.addwithvalue("c_tip", "mazda"); //típusprobléma lehet! //command.parameters.add("c_tip", OracleType.VarChar); //command.parameters["c_tip"].value = "mazda";

//command.parameters.add(new OracleParameter("c_ar", "1800000")); //command.parameters.addwithvalue("c_ar", "1800000"); command.parameters.add("c_ar", OracleType.Double); command.parameters["c_ar"].value = 1800000; OracleDataReader reader = command.executereader(); if (reader.hasrows) while (reader.read()) OracleString rsz = reader.getoraclestring(0); Console.Write(rsz.ToString() + " "); OracleString tipus = reader.getoraclestring(1); Console.Write(tipus.ToString() + " "); OracleString szin = reader.getoraclestring(2); Console.Write(szin.ToString() + " "); OracleNumber evjarat = reader.getoraclenumber(3); Console.Write(evjarat.ToString() + " "); OracleNumber ar = reader.getoraclenumber(4); Console.WriteLine(ar.ToString() + " "); else Console.WriteLine("No rows found"); reader.close(); II/3 IN paraméteres tárolt eljárás hívás void InProcedureCall() //Megadott életkornál idősebb autók árának csökkentése command.commandtext = "create or replace procedure C#_arcsokkent " + "(kor in number) is " + "begin " + "update auto_c# set ar=ar*0.9 where " + "to_char(sysdate, 'yyyy')-evjarat > kor; " + "end;"; Console.WriteLine("Tárolt eljárás létrejött"); command = new OracleCommand("C#_arcsokkent", con); command.commandtype = System.Data.CommandType.StoredProcedure; //Sample of how to bind parameters to the Stored Procedure OracleParameter korin = new OracleParameter(); korin.value = 5; //5 évnél idősebb autók árának 10%-os csökkentése

korin.parametername = "kor"; command.parameters.add(korin); korin.direction = System.Data.ParameterDirection.Input; //Execute stored procedure call Console.WriteLine("Sikeres tárolt eljárás hívás"); II/4 OUT paraméteres tárolt eljárás hívás void OutProcedureCall() //Megadott színű autók átlagárának lekérdezése command.commandtext = "create or replace procedure C#_atlagar " + "(sz in char, atl out number) is " + "begin " + "select avg(ar) into atl from auto_c# where trim(szin) = sz; " + "end;"; Console.WriteLine("Tárolt eljárás létrejött"); command = new OracleCommand("C#_atlagar", con); command.commandtype = System.Data.CommandType.StoredProcedure; //Sample of how to bind parameters to the Stored Procedure OracleParameter szinin = new OracleParameter("sz", OracleType.VarChar); Console.Write("Milyen színű autók átlagárát kérdezed? "); szinin.value = Console.ReadLine(); szinin.direction = System.Data.ParameterDirection.Input; command.parameters.add(szinin); OracleParameter atlout = new OracleParameter("atl",OracleType.Number); atlout.direction = System.Data.ParameterDirection.Output; command.parameters.add(atlout); //Execute stored procedure call //A paraméterek tömbje 0-tól indexelődik Console.WriteLine("Eljárás eredmény: " + command.parameters[1].value);

II/5 Tárolt függvény hívás void FunctionCall() //Megadott színű autók átlagárának lekérdezése command.commandtext = "create or replace function C#_atlagarfv " + "(sz in char) return number is " + "atl number(10,2); " + "begin " + "select avg(ar) into atl from auto_c# where trim(szin) = sz; " + "return atl; " + "end;"; Console.WriteLine("Tárolt eljárás létrejött"); command = new OracleCommand("C#_atlagarfv", con); command.commandtype = System.Data.CommandType.StoredProcedure; //Sample of how to bind parameters to the Stored Procedure OracleParameter szinin = new OracleParameter("sz", OracleType.VarChar); Console.Write("Milyen színű autók átlagárát kérdezed? "); szinin.value = Console.ReadLine(); szinin.direction = System.Data.ParameterDirection.Input; command.parameters.add(szinin); OracleParameter atlout = new OracleParameter("atl",OracleType.Number); atlout.direction = System.Data.ParameterDirection.ReturnValue; command.parameters.add(atlout); //Execute stored procedure call //A paraméterek tömbje 0-tól indexelődik Console.WriteLine("Függvény eredmény: " + command.parameters[1].value); III. Tranzakciókezelés Feladat: az összes autó árának megadott értékkel csökkentése. Ezt egy update utasítás hívásával meg tudjuk oldani, de nem biztos h. minden rekord esetén elvégezhető a módosítás az ar>0 integritási feltétel miatt. Ha van ilyen rekord, akkor a többi módosítást is vissza kell vonni. Egyébként véglegesítésre kerül az árak csökkentése. void OracleTransaction( ) OracleTransaction mytrans; // Start a local transaction mytrans=con.begintransaction(system.data.isolationlevel.readcommitted);

// Assign transaction object for a pending local transaction command.transaction = mytrans; command.commandtext = "update auto_c# set ar=ar-:csokkentes"; command.parameters.add("csokkentes", OracleType.Double); Console.WriteLine("Mennyivel csökkentsük az autók árát? "); command.parameters["csokkentes"].value = double.parse(console.readline()); mytrans.commit(); Console.WriteLine("Sikeres árcsökkentés"); mytrans.rollback(); Console.WriteLine("Árcsökkentés nem lehetséges");