1 / 45

Haladó Programozás

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. Haladó Programozás.

marlee
Download Presentation

Haladó Programozás

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 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 OE-NIK HP

  3. 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

  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: http://www.microsoft.com/en-us/download/details.aspx?id=22985 • "Upgrade Microsoft Visual Studio 2008 to the SP1 before installing SQL Server 2008. Visual Studio SP1 can be found at http://go.microsoft.com/fwlink/?LinkId=159627." • "New installation or add features" ablakon keresztül install, reboot • http://www.microsoft.com/en-us/download/details.aspx?id=29062  MSSQL 2012 Express OE-NIK HP

  5. 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

  6. SQL Management Studio • Databases-re jobbkatt, New Database • name: nikdb , owner: default, <OK> • Security\logins -re jobbkatt, New Login • name: nik, SQL server authentication, password: kin"Enforce password policy"-ből pipa kiszedéseDefault 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

  7. 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, <execute> (forrás: http://nik.uni-obuda.hu/hp/) • Databases\nikdb\Tables  dept & emp (és nem northwind) OE-NIK HP

  8. 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 http://www.akadia.com/services/dotnet_data_reader.html 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 OE-NIK HP

  10. 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

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

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

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

  14. 2. INSERT privatevoid button18_Click(object sender, EventArgs e) { SqlCommand comm = newSqlCommand("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

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

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

  17. 5. SELECT privatevoid button14_Click(object sender, EventArgs e) { listBox1.Items.Clear(); SqlCommand comm = newSqlCommand("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

  18. 6. BIND privatevoid button13_Click(object sender, EventArgs e) { dataGridView1.DataSource = null; dataGridView1.Rows.Clear(); dataGridView1.Columns.Clear(); dataGridView1.AllowUserToAddRows = false; SqlCommand comm = newSqlCommand("select * from EMP order by ename", conn); SqlDataReader reader = comm.ExecuteReader();  while (reader.Read()) { [GRIDVIEW FELTÖLTÉSE] } reader.Close(); } OE-NIK HP

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

  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 OE-NIK HP

  21. 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

  22. 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

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

  24. 2. INSERT privatevoid 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

  25. 3. UPDATE privatevoid 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

  26. 4. DELETE privatevoid 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! OE-NIK HP

  27. 5. SELECT privatevoid 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

  28. 6. BIND privatevoid 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

  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 OE-NIK HP

  30. 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

  31. Entity model megközelítési módok • CodeFirst: 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 • ModelFirst: Modellező eszközzel „megrajzoljuk” az adatmodellt (= osztálydiagramot) ( http://msdn.microsoft.com/en-us/magazine/hh148150.aspx ) OE-NIK HP

  32. 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 <FINISH>  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

  33. LocalDB létrehozása (EF v6) • Entity Framework version 6, NuGetinstall-packageEntityFramework 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 <ADD> 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 ( http://msdn.microsoft.com/en-us/library/vstudio/ms233763%28v=vs.110%29.aspx ) OE-NIK HP

  34. LocalDB létrehozása (EF v4.3 / v5) • Server Explorer -> Right click (Data Connections) -> Add Connection( Microsoft SQL Server + .Net providerfor SQL Server <OK> ) • Server name = (localdb)\v11.0 , Databasename = EMPDEPT <OK> • "Databasedoesnotexists. Attempttocreate?" <YES> • Ú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 newdatasource, Database <NEXT>; Entitydatamodel <NEXT>; Generatefromdatabase <NEXT>; LocalDB legyen a legördülő menüben + saveconnectionsettings <NEXT>; Mindegyik tábla mellett pipa + Pluralizeobjectnames + Modelnamespace = EMPDEPTModel <FINISH> • Templatecanharmyour computer, click ok torun ... <OK> <OK> ( http://msdn.microsoft.com/en-us/data/jj206878 ) OE-NIK HP

  35. 1. Inicializálás • nikdbEntities NE = newnikdbEntities();  az „NE.EMP” és „NE.DEPT” adattagok LINQ adatforrásként használhatóak: varreszleg = NE.DEPT.First(); vardolg = fromdolgozoin NE.EMP wheredolgozo.ENAME.Contains("E") selectdolgozo; nikdbEntities NE; privatevoid button4_Click(objectsender, EventArgs e) { NE = newnikdbEntities(); MessageBox.Show("CONNECTED"); } OE-NIK HP

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

  37. 3. UPDATE privatevoid 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

  38. 4. DELETE privatevoid 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

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

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

  41. +1 JOIN var dolgozok = from dolgozo in NE.EMP join reszleg in NE.DEPT on dolgozo.DEPTNO equals reszleg.DEPTNO selectnew { dolgozo.ENAME, dolgozo.SAL, reszleg.DNAME }; var dolgozok = from dolgozo in NE.EMP selectnew { dolgozo.ENAME, dolgozo.SAL, dolgozo.DEPT.DNAME }; OE-NIK HP

  42. 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

  43. 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

  44. OE-NIK HP

  45. OE-NIK HP

More Related