Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

V 1.0 OE-NIK HP 1 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.

Hasonló előadás


Az előadások a következő témára: "V 1.0 OE-NIK HP 1 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."— Előadás másolata:

1 V 1.0 OE-NIK HP 1 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

2 V 1.0 OE-NIK HP 2 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

3 V 1.0 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-ben default: LocalDB, API- kompatibilis, de szerver-szolgáltatás helyett igény szerint induló library (Data Source = (localdb)\v11.0)  Mi ezt fogjuk használni OE-NIK HP 3

4 V 1.0 OE-NIK HP 4 SQL SERVER 2008 bejelentkezés Két fajta bejelentkezési mód: SQL Server Authentication és Windows authentication, nekünk az előbbi a jó, de alapértelmezetten az Express változatnál csak az utóbbi van engedélyezve Engedélyezés: Microsoft SQL Server 2008 R2 RTM - Management Studio Express: us/download/details.aspx?id=22985 "Upgrade Microsoft Visual Studio 2008 to the SP1 before installing SQL Server Visual Studio SP1 can be found at "New installation or add features" ablakon keresztül install, reboot details.aspx?id=29062  MSSQL 2012 Express

5 V 1.0 SQL Management Studio Ezt a folyamatot a laborgépeken NEM kell végigjátszani, a.\SQLEXPRESS szerverbe „nik” felhasználóval, „kin” jelszóval be tudunk lépni, és a „nikdb” adatbázisban ott találhatóak az Oracle rendszerben megszokott EMP és DEPT táblák Windows authentication móddal kell belépni.\SQLEXPRESS –be "Object Explorer" -ben gyökérelemre jobbkatt, Properties, Security > Server authentication: SQL Server AND Windows authentication Database létrehozásakor „Owner User” megadása kell, felhasználó létrehozásakor „Default Database” megadása kell … Lehetne módosítani később, de nem kell, jó lesz így, az új adatbázis tulajdonosa a Windows felhasználónk lesz... OE-NIK HP 5

6 V 1.0 SQL Management Studio Databases-re jobbkatt, New Database –name: nikdb, owner: default, Security\logins -re jobbkatt, New Login –name: nik, SQL server authentication, password: kin "Enforce password policy"-ből pipa kiszedése Default database: nikdb Security\logins\nik -re jobbkatt, Properties –User Mapping, felső listában a nikdb mellé pipa; alsó listában a db_denydatareader és db_denydatawriter KIVÉTELÉVEL mindegyik mellé pipa SQL management studio -ból kilépünk –Start Menu\Programs\Microsoft SQL Server 2008 R2\Configuration Tools\SQL Server Configuration Manager: SQL Server services/SQL Server, jobbkatt, restart OE-NIK HP 6

7 V 1.0 SQL Management Studio A szerver elindulása után lépjünk vissza az SQL management studio-ba User: nik, Pass: kin, "SQL server authentication" csatlakozás Databases\nikdb- re jobbkatt –new query –SQL_empdept.sql copypaste, (forrás: –Databases\nikdb\Tables  dept & emp (és nem northwind) OE-NIK HP 7

8 V 1.0 DbConnection vs DataSet vs LINQ Különböző absztrakciós szintek 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 OE-NIK HP 8

9 V 1.0 OE-NIK HP 9 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

10 V 1.0 ADO.NET: DbConnection/DbReader Régi stílusú adatbázis-elérés (nem MVC) 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) OE-NIK HP 10

11 V Inicializálás string connStr 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 11

12 V 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: FConnStr = "server = " + FServer + ";\n" + "database = " + FDb + ";\n" + "user id = " + FUser + ";\n" + "password = " + FPass + ";\n"; FDatabase_Connection = new NpgsqlConnection(FConnStr); break; OE-NIK HP 12

13 V 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 13

14 V 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 14

15 V 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 15

16 V 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 16

17 V 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(); } OE-NIK HP 17

18 V 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(); } OE-NIK HP 18

19 V 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 19

20 V 1.0 OE-NIK HP 20 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

21 V 1.0 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 21

22 V 1.0 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 22

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

24 V 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 24

25 V 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 25

27 V 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()); } OE-NIK HP 27

28 V 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; } OE-NIK HP 28

29 V 1.0 OE-NIK HP 29 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

30 V 1.0 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 OE-NIK HP 30

31 V 1.0 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) ( ) OE-NIK HP 31

32 V 1.0 Entity Data Model – SQLExpress / MSSQL Ha van meglévő MSSQL vagy SQLExpress adatbázisunk, akkor a connection string-ben lévő adatok segítségével tudunk ehhez csatlakozni (host, user, pass, catalog) Data sources: Add new data source, Database, Entity Data Model –Generate from database  Data Connection kiválasztása –Include sensitive data, save in app.config –Táblák kiválasztása után  EDMX diagram 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 OE-NIK HP 32

33 V 1.0 LocalDB létrehozása (EF v6) Entity Framework version 6, NuGet install-package EntityFramework  mi nem ezt fogjuk választani Csak már elmentett Solution esetén működik! Project, Add New Item, Service-based Database Adatbázisból egyből osztályokat tudunk létrehozni az gomb után (Data Source Configuration Wizard) Többnyire itt „Cancel” kell, ha az adatbázis még nincs kész, és manuálisan kell létrehozni az adatokat, majd EZUTÁN tudjuk az osztályokat létrehozni ( en-us/library/vstudio/ms233763%28v=vs.110%29.aspx ) OE-NIK HP 33

34 V 1.0 LocalDB létrehozása (EF v4.3 / v5) Server Explorer -> Right click (Data Connections) -> Add Connection ( Microsoft SQL Server +.Net provider for SQL Server ) Server name = (localdb)\v11.0, Database name = EMPDEPT "Database does not exists. Attempt to create?" Ú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 data source, Database ; Entity data model ; Generate from database ; LocalDB legyen a legördülő menüben + save connection settings ; Mindegyik tábla mellett pipa + Pluralize object names + Model namespace = EMPDEPTModel Template can harm your computer, click ok to run... ( ) OE-NIK HP 34

35 V Inicializálás nikdbEntities NE = new nikdbEntities();  az „NE.EMP” és „NE.DEPT” adattagok LINQ adatforrásként használhatóak: var reszleg = NE.DEPT.First(); var dolg = from dolgozo in NE.EMP where dolgozo.ENAME.Contains("E") select dolgozo; nikdbEntities NE; private void button4_Click(object sender, EventArgs e) { NE = new nikdbEntities(); MessageBox.Show("CONNECTED"); } OE-NIK HP 35

36 V INSERT private void button1_Click(object sender, EventArgs e) { var ujdolg = new EMP() { ENAME = "BELA", MGR = null, DEPTNO = 20, EMPNO = 1000 }; NE.EMP.AddObject(ujdolg); NE.SaveChanges(); MessageBox.Show("DONE"); } OE-NIK HP 36

37 V UPDATE private void button2_Click(object sender, EventArgs e) { var valaki = NE.EMP.Single(x => x.EMPNO == 1000); valaki.ENAME = "JOZSI"; NE.SaveChanges(); MessageBox.Show("DONE"); } OE-NIK HP 37

38 V DELETE private void button3_Click(object sender, EventArgs e) { var valaki = NE.EMP.Single(x => x.EMPNO == 1000); NE.EMP.DeleteObject(valaki); NE.SaveChanges(); MessageBox.Show("DONE"); } OE-NIK HP 38

39 V SELECT private void button9_Click(object sender, EventArgs e) { listBox1.Items.Clear(); foreach (var dolg in NE.EMP.Where(dolgozo => dolgozo.SAL >= 3000)) { listBox1.Items.Add(dolg.ENAME); } OE-NIK HP 39

40 V BIND private void button10_Click(object sender, EventArgs e) { dataGridView1.Columns.Clear(); dataGridView1.Rows.Clear(); dataGridView1.DataSource = null; var dolgozok = from dolgozo in NE.EMP orderby dolgozo.ENAME select dolgozo; dataGridView1.DataSource = dolgozok; } OE-NIK HP 40

41 V 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 }; var dolgozok = from dolgozo in NE.EMP select new { dolgozo.ENAME, dolgozo.SAL, dolgozo.DEPT.DNAME }; OE-NIK HP 41

42 V 1.0 Feladat Az EMP táblához csatlakozzunk LINQ módszerrel, listázzuk ki a táblát DataGridView és TreeView vezérlőkben Legyen lehetőségünk a CRUD alapműveletek elvégzésére OE-NIK HP 42

43 V 1.0 OE-NIK HP 43 Források … é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)

44 V 1.0 OE-NIK HP 44

45 45 OE-NIK HP


Letölteni ppt "V 1.0 OE-NIK HP 1 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."

Hasonló előadás


Google Hirdetések