Haladó Programozás Adatbázis és felhasználó létrehozása MS SQL Server alatt Adatbázisok elérése DbConnection/DbReader módszerrel (Nem tananyag!) SQL server.

Slides:



Advertisements
Hasonló előadás
Felhasználói felületek és üzleti logika
Advertisements

2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
© Kozsik Tamás Adatbáziskezelés •Relációs adatbáziskezelők •Noha a Java objektum-elvű, egyelőre nem az objektum-elvű adatbáziskezelőket támogatja.
Felhasználói felületek és üzleti logika Bollobás Dávid ASP.NET
Adatbázisok SQL. TARTALOM Szijártó M.2 Témakörök  Az SQL tulajdonságai  A műveletek fajtái  Objektum-műveletek  Lekérdezések Tulajdonságok és műveletek.
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
1 Informatikai Szakképzési Portál Adatbázis kezelés DCL – Adatvezérlő nyelv.
Delphi programozás alapjai
LINQ to DataSet Kereskényi Róbert
Vállalati adatok megnyitása a külvilág felé
– SQL 2: Adatok kezelése – Tarcsi Ádám, január 30. Adatbázis gyakorlat.
– Adattáblák & adatok kezelése – Tarcsi Ádám január Adatbázis gyakorlat.
Többtáblás lekérdezések, allekérdezések Rózsa Győző
megismerése, mintaadatbázis létrehozása
Triggerek II. ADATBÁZIS ALAPÚ RENDSZEREK.  Az Oracle kifinomult módon támogatja a sorszámozások generálását  Szekvencia: olyan adatbázis-objektum, amely.
Adatbázis alapú rendszerek
Készítette: Sárközi Anikó
Delphi programozás alapjai Nagyváradi Anett PTE PMMK MIT.
SQL92 lehetőségek KL A tábla B tábla C view adatok VIEW működése utasítás: SELECT.. FROM A,B … SELECT.. FROM C Az adatok a hivatkozáskor állítódnak elő.
WEB Technológiák Coldfusion ME Általános Informatikai Tsz. dr. Kovács László.
Entity framework Krizsán Zoltán
ADATBÁZISOK
ADATBÁZISOK
ADATBÁZISOK
Adattáblák létrehozása, módosítása, tranzakciók, megszorítások Rózsa Győző.
Delphi programozás 8. ELŐADÁS ADO ActiveX Data Objects.
WEB Technológiák ISAPI ME Általános Informatikai Tsz. dr. Kovács László.
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
Az SQL nyelv alapjai.
Adatkezelés Ez az előadó neve beosztása vállalata.
Adatkezelés ABC: A Create Table-től a megjelenítésig Árvai Zoltán Consultant, Trainer Számalk Oktatóközpont.
Adatbázis adminisztrátori ismeretek
Adattáblák létrehozása, módosítása, tranzakciók, megszorítások Rózsa Győző.
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele a minimum elégséges érdemjegynek!
Segédlet vizuális programozáshoz Kovács László
Felhasználók és jogosultságok
SQL DDL DATA DEFINITION LANGUAGE. Táblák létrehozása CREATE TABLE táblanév ( oszlopnév1 típus(méret) /DEFAULT érték/ /NOT NULL/, oszlopnév2 típus(méret)
Készítette: Tóth Ervin
Objektum orientált programozás a gyakorlatban
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Készítette: Lipp Marcell
APEX BMF, II. félév.
A gyakorlatok munkakörnyezete
XML fejlesztések TSQL fejlesztések Tábla paraméter SQLCLR fejlesztések 8k limit feloldása Több paraméteres UDA-ek Ordered UDF-ek Entity Framework ADO.NET.
ORACLE ORDBMS adminisztrációs feladatok 3. rész dr. Kovács László 2004.
Adatbázis-kezelés Tarcsi Ádám január. 15. MySQL és PHP.
Tarcsi Ádám, Adatbázis gyakorlat – Adattáblák – Tarcsi Ádám, január.
Szerver és kliens gép közötti kommunikáció Adattárolási modellek  OLTP: OnLine Transaction Processing az MSSQL Szervert egy időben egyszerre sok felhasználó.
5. gyakorlat Fleiner Rita.
Webprogramozó tanfolyam
2. AB gyakorlat Egytáblás csoportosító lekérdezések.
WEBSTAR CSOPORT WC S ADATBÁZIS VERZIÓKÖVETÉSE: LIQUIBASE Marics Tamás június 20.
Adatbázis rendszerek I
Haladó Programozás Adatbázis-elérési módszerek összehasonlítása
User Profiles Endrődi Tamás (MCT, MCP, MCITP) GDF Informatikai Intézet vezetője SZÁMALK Oktatóközpont.
1 Copyright © 2004, Oracle. All rights reserved. Bevezetés.
Török János Zsolt Entity Framework Török János Zsolt
Informatikai gyakorlatok 11. évfolyam
Access adatbáziskezelés
Programozás III JPA.
1 SQL jogosultság-kezelés Privilégiumok Grant és Revoke Grant Diagrammok.
Adatbázis alapú rendszerek
Kovács Gergely Péter Bevezetés
Web programozás és haladó fejlesztési technikák – C#
Logisztikai projekt - gyakorlat Adatbázis-elmélet
Web programozás és haladó fejlesztési technikák
Web programozás és haladó fejlesztési technikák
Függvénysablonok használata
Előadás másolata:

Haladó Programozás Adatbázis és felhasználó létrehozása MS SQL Server alatt Adatbázisok elérése DbConnection/DbReader módszerrel (Nem tananyag!) SQL server elérése DataSet módszerrel (Nem tananyag!) SQL server elérése LINQ / Entity Framework módszerrel OE-NIK HP

Haladó Programozás Adatbázis és felhasználó létrehozása MS SQL Server alatt Adatbázisok elérése DbConnection/DbReader módszerrel SQL server elérése DataSet módszerrel SQL server elérése LINQ / Entity Framework módszerrel OE-NIK HP

SQL Server / SQL Express / LocalDB MSSQL: tipikusan kis és középvállalatok által használt adatbázis-kezelő szerver („fully ACID compliant”) (Oracle, IBM, MSSQL, Sybase, Teradata ; Free: MySQL, PostgreSQL, MariaDB) Korábbi VS verziók (x<2012): Az MS-SQL szerver egy kisebb változata integrálva volt a fejlesztőeszköz telepítőjébe (SQL Express) : max 10gb/database, max 1 physical cpu, max 1gb ram (Data Source=.\SQLEXPRESS) VS 2010 óta elérhető, VS 2012-től default: LocalDB, de szerver-szolgáltatás helyett igény szerint induló library, ami egy adatbázis-file-t használ (Data Source = (localdb)\v11.0) Órán ezt használjuk A gépeken van MSSQL 2012 Express is, ha esetleg a projekthez kell OE-NIK HP

Táblák Két fajta bejelentkezési mód: SQL Server Authentication és Windows authentication, mi az utóbbit használjuk Oracle demo táblák OE-NIK HP

DbConnection vs DataSet vs LINQ Különböző absztrakciós szintek DbConnection alap SQL-szintű elérés, string SQL utasításokkal, object tömb eredményekkel DataSet az SQL réteg fölé egy erősen típusos, GUI központú réteg kerül, a műveleteket típusos metódusok végzik DB-LINQ / Entity Framework az SQL réteg fölé egy MVC elvű ORM (Object Relational Mapping) réteget helyezünk: a táblákat mint objektumok általános gyűjteménye kezeljük Alapvető műveletek: Kapcsolódás/inicializáció; beszúrás; módosítás; törlés; adatlekérés; GUI-hoz kapcsolás Az „Alapvető műveletek” listán fogunk mindegyik módszernél végigmenni http://www.akadia.com/services/dotnet_data_reader.html OE-NIK HP

Haladó Programozás Adatbázis és felhasználó létrehozása MS SQL Server alatt Adatbázisok elérése DbConnection/DbReader módszerrel (Nem tananyag!) SQL server elérése DataSet módszerrel SQL server elérése LINQ / Entity Framework módszerrel OE-NIK HP

ADO.NET: DbConnection/DbReader Régi stílusú adatbázis-elérés (nem MVC / ORM) Előny: gyors, egyszerű Hátrány: nehéz módosítani és technológiát/tárolási módszert váltani A különböző adatbázis-szerverekhez különböző implementációk Közös ős-osztályok a különféle feladatokhoz Adatbázis-kapcsolat: DbConnection SQL/RPC utasítás végrehajtása: DbCommand Utasítás eredményének beolvasása: DbDataReader Specifikus utódosztályok a különféle adatbázis-szerverekhez SqlConnection (MSSQL System.Data.SqlClient), MySqlConnection (MySQL MySql.Data.MySqlClient), NpgsqlConnection (PostgreSQL - Npgsql), OracleConnection (Oracle System.Data.OracleClient) RPC utasítás: Remote Procedure Call = Tárolt eljárás Az utódosztályok elnevezése a DbCommand és DbDataReader esetén is ugyanezt a mintát követi OE-NIK HP

1. Inicializálás string connStr = @"Data Source=.\SQLEXPRESS;Initial Catalog=nikdb;User ID=nik;Password=kin"; SqlConnection conn; private void button15_Click(object sender, EventArgs e) { conn = new SqlConnection(connStr); conn.Open(); MessageBox.Show("CONNECTED"); } OE-NIK HP

1. Inicializálás (alternatívák: MySQL, Postgre) case server_type.mysql: FConnStr = "server = " + FServer + ";\n" + "database = " + FDb + ";\n" + "user id = " + FUser + ";\n" + "password = " + FPass + ";\n"; FDatabase_Connection = new MySqlConnection(FConnStr); break; case server_type.postgre: FDatabase_Connection = new NpgsqlConnection(FConnStr); OE-NIK HP

1. Inicializálás (alternatíva: Oracle) case server_type.oracle: FConnStr = "data source = " + FServer + ";\n" + "user id = " + FUser + ";\n" + "password = " + FPass + ";\n"; FDatabase_Connection = new OracleConnection(FConnStr); break; OE-NIK HP

2. INSERT private void button18_Click(object sender, EventArgs e) { SqlCommand comm = new SqlCommand("insert into EMP (ENAME, MGR, DEPTNO, EMPNO) values ('BELA', NULL, 20, 1000)", conn); SqlDataReader reader=comm.ExecuteReader(); MessageBox.Show(reader.RecordsAffected.ToString()); reader.Close(); } OE-NIK HP

3. UPDATE private void button18_Click(object sender, EventArgs e) { SqlCommand comm = new SqlCommand("update EMP set ENAME='JOZSI' where EMPNO=1000", conn); SqlDataReader reader=comm.ExecuteReader(); MessageBox.Show(reader.RecordsAffected.ToString()); reader.Close(); } OE-NIK HP

4. DELETE private void button18_Click(object sender, EventArgs e) { SqlCommand comm = new SqlCommand("delete from EMP where empno=1000", conn); SqlDataReader reader=comm.ExecuteReader(); MessageBox.Show(reader.RecordsAffected.ToString()); reader.Close(); } OE-NIK HP

5. SELECT private void button14_Click(object sender, EventArgs e) { listBox1.Items.Clear(); SqlCommand comm = new SqlCommand("select * from EMP where sal>=3000 order by ename", conn); SqlDataReader reader = comm.ExecuteReader(); while (reader.Read()) listBox1.Items.Add(reader["ENAME"].ToString()); } reader.Close(); Cél: azon nevekkel feltölteni egy listboxot, akiknek a fizetése >= 3000 OE-NIK HP

6. BIND private void button13_Click(object sender, EventArgs e) { dataGridView1.DataSource = null; dataGridView1.Rows.Clear(); dataGridView1.Columns.Clear(); dataGridView1.AllowUserToAddRows = false; SqlCommand comm = new SqlCommand("select * from EMP order by ename", conn); SqlDataReader reader = comm.ExecuteReader(); while (reader.Read()) [GRIDVIEW FELTÖLTÉSE] } reader.Close(); Adatkötés létrehozása: cél dataGridView-hoz csatolni az adattáblát. Értelemszerűen alacsonyszintű kapcsolat esetén nem lehetséges  kézzel kell feltölteni OE-NIK HP

6. BIND - GRIDVIEW FELTÖLTÉSE if (dataGridView1.Columns.Count == 0) { for (int i = 0; i < reader.FieldCount; i++) { string coltext = reader.GetName(i).ToLower(); dataGridView1.Columns.Add(coltext, coltext); } }  dataGridView1.Rows.Add(); int rowid = dataGridView1.Rows.Count - 1; for (int i = 0; i < reader.FieldCount; i++) dataGridView1.Rows[rowid].Cells[i].Value = reader[i].ToString(); OE-NIK HP

Haladó Programozás Adatbázis és felhasználó létrehozása MS SQL Server alatt Adatbázisok elérése DbConnection/DbReader módszerrel SQL server elérése DataSet módszerrel (Nem tananyag!) SQL server elérése LINQ / Entity Framework módszerrel OE-NIK HP

ADO.NET: DataAdapter/DataSet/DataTable Régi stílusú adatbázis-elérés (nem MVC) Előny: nem kell konkrét SQL utasításokat írni, könnyebb adatkapcsolódás a GUI elemeihez Hátrány: nehéz módosítani és technológiát/tárolási módszert váltani Tipikusan csak MSSQL-lel működik normálisan (amúgy: szabványos ODBC drivereken keresztül: régi, bugos) Automatikusan generált, adatfüggő típusozott osztályoktól függ (~200KB teljesen normális méret egy két táblás adatbázishoz) Az osztályok legenerálása után egyedi osztályok vannak a táblákhoz/adatmezőkhöz: BindingSource: Adatforrás-kapcsolat a form felé TableAdapter: Tábla-leírás DataSet: adatbázis-reprezentáció, táblák egységbe zárása OE-NIK HP

DataSet létrehozása Server explorer (Express Edition-ben: Database Explorer) és Data Sources (shift+alt+d) fül kell Server explorer: Add connection Type: Microsoft SQL Server Server Name: .\SQLEXPRESS, SQL Server Authentication, User: nik, Pass: kin, Save password, Database name: nikdb Data sources: Add new data source Database / DataSet Connection kiválasztása, „Include sensitive data” „Save connection string to the application file”, Táblák kiválasztása Ezután a DataSources-ból a formra egyszerűen ráhúzzuk a táblát, máris kész az alkalmazás OE-NIK HP

1. Inicializálás private void button5_Click(object sender, EventArgs e) { eMPTableAdapter.Fill(nikdbDataSetVariable.EMP); MessageBox.Show("CONNECTED"); } OE-NIK HP

2. INSERT private void button8_Click(object sender, EventArgs e) { DataRow ujsor = nikdbDataSetVariable.EMP.NewRow(); //NewEmpRow() is használható lenne ujsor["ENAME"] = "BELA"; ujsor["MGR"] = DBNull.Value; ujsor["DEPTNO"] = 20; ujsor["EMPNO"] = 1000; nikdbDataSetVariable.EMP.Rows.Add(ujsor); eMPTableAdapter.Update(nikdbDataSetVariable); MessageBox.Show("DONE"); } OE-NIK HP

3. UPDATE private void button7_Click(object sender, EventArgs e) { DataRow dr = nikdbDataSetVariable.EMP.Rows[0]; dr.BeginEdit(); dr["ENAME"] = "JOZSI"; dr.EndEdit(); nikdbDataSet valtozas=(nikdbDataSet)nikdbDataSetVariable. GetChanges(DataRowState.Modified); if (valtozas.HasErrors) { nikdbDataSetVariable.RejectChanges(); } else { nikdbDataSetVariable.AcceptChanges(); eMPTableAdapter.Update(valtozas); } OE-NIK HP

4. DELETE private void button6_Click(object sender, EventArgs e) { DataRow dr = nikdbDataSetVariable.EMP.Rows[0]; dr.Delete(); nikdbDataSetVariable.AcceptChanges(); eMPTableAdapter.Update(nikdbDataSetVariable); } DataRow dr = nikdbDataSetVariable.EMP.Select("empno=1000")[0]; // EZ NEM A LINQ EXTENSION METHOD, CSAK UGYANAZ A NEVE! A kód papíron működik (VS2005-ben még ezt használtam ) … Most teszteltem VS2010 alatt: mintha működne (a 14 soros táblánál 14x működik, 15-ödszörre ahogy kell, kiakad, hogy „dataset is empty”)… Közben meg fizikailag a táblából nem töröl semmit valamiért: a program újraindítása után a táblában megint 14 sor van. OE-NIK HP

5. SELECT private void button12_Click(object sender, EventArgs e) { listBox1.Items.Clear(); foreach (DataRow dr in nikdbDataSetVariable.EMP.Select("sal>=3000")) listBox1.Items.Add(dr["ENAME"].ToString()); } Cél: azon nevekkel feltölteni egy listboxot, akiknek a fizetése >= 3000 OE-NIK HP

6. BIND private void button11_Click(object sender, EventArgs e) { dataGridView1.Columns.Clear(); dataGridView1.Rows.Clear(); dataGridView1.DataSource = null; //dataGridView1.DataSource = nikdbDataSetVariable.EMP; dataGridView1.DataSource = eMPBindingSource; } Mindegy h hogyan állítom be az adatforrást OE-NIK HP

Haladó Programozás Adatbázis és felhasználó létrehozása MS SQL Server alatt Adatbázisok elérése DbConnection/DbReader módszerrel SQL server elérése DataSet módszerrel SQL server elérése LINQ / Entity Framework módszerrel OE-NIK HP

LINQ: to SQL / to Entities (Entity Framework) Ránézésre hasonló: LINQ záradékok és szintaxis, Lambda kifejezések LINQ to SQL (DLINQ, DB-LINQ, L2S): csak közvetlen leképezést, és csak MSSQL dialektust támogat. Egyszerű és gyors, de nagyon korlátozottan használható („Rapid development”)  Project/Add Class/LINQ to SQL classes LINQ to Entities (ADO.NET Entity Framework, L2E): teljes ORM, N:M kapcsolatokat is támogat, és kiegészíthető alternatív adatbázis-dialektusokkal (LINQ to Oracle, NHibernate, InterLinq, LLBLGen) („Large-scale enterprise development”)  Data sources: Add new data source, Database, Entity Data Model  Újabb VS verzióknál: Project/Add New Item/Data/ADO.NET Entity Data Model OE-NIK HP

Entity model megközelítési módok Code First: Először hozzuk létre az osztályokat, és ebből az adatbázist Database/SQL First: Kész adatbázisból csinálunk modell osztályokat Model First: Modellező eszközzel „megrajzoljuk” az adatmodellt (= osztálydiagramot) ( http://msdn.microsoft.com/en-us/magazine/hh148150.aspx ) OE-NIK HP

Entity Framework verziók EF1 = EF3.5  .NET 3.5 EF4  .NET 4 „POCO support, lazy loading, testability improvements, customizable code generation and the Model First workflow” EF4.1  „first to be published on NuGet. This release included the simplified DbContext API and the Code First workflow”  Jó! EF4.3  „Code First Migrations”  Teljesen használható ORM! EF5, EF6, EF 6.1  https://msdn.microsoft.com/en-us/data/jj574253.aspx Frissíthető (nekünk nem kell, jó a beépített): > NuGet> Install-Package EntityFramework (esetleg: -Version x.x.x) > Entity Framework 6 Tools for Visual Studio: http://www.microsoft.com/en-us/download/details.aspx?id=40762 OE-NIK HP

LocalDB létrehozása In-Solution Project / Add New Item / Service-based Database (ez SQL server file lesz. Local Database: SQL server compact file) Nekünk mindkettő jó, service-based-et használunk: EmpDept Előbb feltöltjük az adatbázist, majd azután generálunk osztályokat In-Profile Server Explorer -> Right click (Data Connections) -> Add Connection ( Microsoft SQL Server + .Net provider for SQL Server <OK>) Server name = (localdb)\v11.0 , Database name = EMPDEPT <OK> "Database does not exists. Attempt to create?" <YES> Akár a „Create New SQL Server Database” is jó, ugyanilyen lépésekkel OE-NIK HP

Adatbázis feltöltése Ugyanúgy automatikusan generált osztályok, mint a DataSet esetén, csak ezek nagyrészt generikus osztályok típusparaméterezett változatai  ~30KB a két táblás adatbázis Új DB-re jobbkatt, New query, a létrehozó SQL -ből mindent copypaste, Execute, ez után a query bezárható (Új db /tables- re jobbkatt, refresh: táblák megjelennek) Project, Add new Item, ADO.NET Entity Data Model <ADD>; Generate from database <NEXT>; az MDF file legyen a legördülő menüben + save connection settings <NEXT>; EF6.0 <NEXT>; Mindegyik tábla mellett pipa + Model namespace = EmpDeptModel <FINISH> Konfigurációtól függően: Template can harm your computer, click ok to run ... <OK> <OK> ( http://msdn.microsoft.com/en-us/data/jj206878 ) http://users.nik.uni-obuda.hu/hp/SQL_empdept.sql OE-NIK HP

1. Inicializálás ED = new EmpDeptEntities(); Console.WriteLine("Connect OK"); var reszleg = ED.DEPT.First(); Console.WriteLine(reszleg.DNAME); var dolg = from dolgozo in ED.EMP where dolgozo.ENAME.Contains("E") select dolgozo; Console.WriteLine(dolg.Count()); OE-NIK HP

2. INSERT var ujdolg = new EMP() { ENAME = "BELA", MGR = null, DEPTNO = 20, EMPNO = 1000 }; ED.EMP.Add(ujdolg); // régen: AddObject ED.SaveChanges(); Console.WriteLine("Insert OK"); OE-NIK HP

3. UPDATE var valaki = ED.EMP.Single(x => x.EMPNO == 1000); valaki.ENAME = "JOZSI"; ED.SaveChanges(); Console.WriteLine("Update OK"); OE-NIK HP

4. DELETE var valaki = ED.EMP.Single(x => x.EMPNO == 1000); ED.EMP.Remove(valaki); // régen: DeleteObject ED.SaveChanges(); Console.WriteLine("Delete OK"); OE-NIK HP

5. SELECT string s = "", sep=""; foreach (var dolg in ED.EMP.Where(dolgozo => dolgozo.SAL >= 3000)) { s += sep + dolg.ENAME; sep = ","; } Console.WriteLine(s); Console.WriteLine( string.Join(";", ED.EMP.Select(x => x.ENAME)) ); Cél: azon nevekkel feltölteni egy listboxot, akiknek a fizetése >= 3000 OE-NIK HP

6. BIND { dataGridView1.Columns.Clear(); dataGridView1.Rows.Clear(); dataGridView1.ItemsSource = null; var dolgozok = from dolgozo in NE.EMP orderby dolgozo.ENAME select dolgozo; dataGridView1.ItemsSource = dolgozok.ToList(); } Így bindelhető DataContexten keresztül is ItemsSource csak dolgozok.ToList() lehet, vagy teljes tábla esetén ED.EMP.Load() után ED.EMP.Local Mindegy h hogyan állítom be az adatforrást OE-NIK HP

+1 JOIN var dolgozok = from dolgozo in NE.EMP join reszleg in NE.DEPT on dolgozo.DEPTNO equals reszleg.DEPTNO select new { dolgozo.ENAME, dolgozo.SAL, reszleg.DNAME }; VAGY Lazy Loading kihasználásával: select new { dolgozo.ENAME,dolgozo.SAL,dolgozo.DEPT.DNAME Mindegy h hogyan állítom be az adatforrást OE-NIK HP

ORM használatának előnyei A kódban sehol sem használunk dialektus függő SQL utasításokat  bármikor dialektust/szervert válthatunk a kód átírása nélkül A string formátumú SQL utasítások helyett a fordítás közben szintaktikailag ellenőrzött lekérdező formátumot használunk  a fordítás közben kiderül, ha a bárhol szintaktikai hiba van A string formátumú SQL paraméterek (string összefűzés) helyett változókat használunk lekérdezés paraméterként  SQL injection elkerülése A lekérdezések eredménye nem általános anonymous típus / objektum / asszociatív tömb  helyette erősen típusos ismert típusú érték / példány / lista Az ORM rétegre +1 réteg elhelyezésével könnyedén megoldható az adatforrás tetszőleges cseréje és a kód tesztelése  Repository Pattern, Dependency Injection Pattern OE-NIK HP

Feladatok Adjunk hozzá a projekthez egy „Service-Based Database” elemet EmpDept.mdf névvel, ezt töltsük föl az orademo.sql –ből, majd hozznk létre Entity osztályokat! Határozzuk meg részleg nevenként a dolgozók átlagjövedelmét (jövedelem = fizetés+jutalék)! Határozzuk meg a legnagyobb (legtöbb főt foglalkoztató) részleg minden adatát! A legkisebb összfizetésű munkakör dolgozóinak fizetését egyenlő összegekkel növeljük meg úgy, hogy a munkakör összfizetése ugyanannyi legyen, mint a második legkisebb összfizetésű munkakör összfizetése! Töröljük azon dolgozókat, akik az elnök felvétele utáni 30 napon belül lettek felvéve! OE-NIK HP

Források http://msdn.microsoft.com/en-us/library/bb882674 http://msdn.microsoft.com/en-us/library/ms254937 … és még soksok link az msdn.microsoft.com –ról … és még soksok link a stackoverflow.com –ról LINQ: Reiter István: C# jegyzet (http://devportal.hu/content/CSharpjegyzet.aspx) , 250. oldal (A könyv az alap LINQ to Objects-et tartalmazza) OE-NIK HP

OE-NIK HP

OE-NIK HP