1 / 67

RP3/predavanje12

RP3/predavanje12. Baze podataka. Baze podataka. ADO.NET je tehnologija za upravljano pristupanje podacima (primarna tehnologija u C#-u za povezivanje s bazama podataka). Naziv potječe od ActiveX Data Object (ADO) iako se te dvije tehnologije dosta razlikuju.

domani
Télécharger la présentation

RP3/predavanje12

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. RP3/predavanje12 • Baze podataka ---------- Računarski praktikum 3 ---------- Maja Starčević

  2. Baze podataka ADO.NET je tehnologija za upravljano pristupanje podacima (primarna tehnologija u C#-u za povezivanje s bazama podataka). Naziv potječe od ActiveX Data Object (ADO) iako se te dvije tehnologije dosta razlikuju. Sadrži niz klasa koje se mogu podijeliti u dva osnovna skupa – one koje pružaju pristup izvoru podataka (bazi) i klase koje podržavaju DataSet model (lokalni podskup podataka iz baze). Računarski praktikum 3

  3. DataSet Objekt klase DataSet predstavlja podskup čitave baze podataka pohranjen na lokalni stroj, pri čemu veza s bazom ima prekide. DataSet može sadržavati čitavu bazu ili samo neke njezine dijelove. Možemo ga shvatiti kao odspojenu bazu podataka (uspostavljena je veza radi sesije s bazom podataka, učitani su potrebni podaci u DataSet te je sesija zatvorena prekidom veze s bazom podataka). Računarski praktikum 3

  4. DataSet DataSet se povremeno spaja na bazu, unosimo promjene koje su se u međuvremenu dogodile, te se DataSet ažurira promjenama koje su napravili drugi procesi. Prednost korištenja DataSet modela je u tome što program ne zadržava resurse potrebne za spajanje te se time oslobađa mrežna propusnost i povećava učinkovitost baze podataka. Model je napravljen prvenstveno za internet aplikacije koje zahtijevaju skalabilnost. Računarski praktikum 3

  5. DataTable DataSet se sastoji od objekata tipa DataTable i DataRelation. Svojstvo Tables vraća kolekciju DataTableCollection koja sadržava sve DataTable objekte. Može se kreirati programiranjem ili kao rezultat upita bazi. Sadrži brojna javna svojstva, između ostalog Columns koji vraća DataColumnCollection koji se sastoji od objekata tipa DataColumn (predstavlja stupac u tablici). Računarski praktikum 3

  6. DataTable DataTable.Rows daje kolekciju koja sadrži retke tablice. Prvo se pristupa traženoj tablici i onda se može iterirati po recima (s foreach naredbom). Kolekcija DataColumnCollection definira shemu po kojoj je sastavljena tablica, dok DataRowCollection sadrži podatke. Za dodavanje i brisanje podataka koriste se metode Add i Remove. Računarski praktikum 3

  7. DataTable Primjer: kreirat ćemo u kodu tablicu (DataTable objekt) s dva stupca i dva retka. dt = new DataTable("myTable"); dt.Columns.Add("stupac1"); dt.Columns.Add("stupac2"); DataRow row = dt.NewRow(); row["stupac1"] = "11"; row["stupac2"] = "12"; dt.Rows.Add(row); row = dt.NewRow(); row["stupac1"] = "21"; row["stupac2"] = "22"; dt.Rows.Add(row); Računarski praktikum 3

  8. DataRelations DataSet.Relations vraća DataRelationCollection koji se sastoji od objekata DataRelation. Objekt DataRelation predstavlja relaciju između dvije tablice (preko DataColumn objekta). Računarski praktikum 3

  9. DataAdapter DataAdapter je most između DataSet objekta i izvora podataka. Pruža mogućnost upravljanja podacima u nepovezanom načinu rada. Sadrži između ostalog Fill metodu za pribavljanje podataka iz baze podataka kojima se puni DataSet objekt te metodu Update pomoću koje se ažuriraju podaci u bazi u odnosu na pripadni DataSet objekt. Računarski praktikum 3

  10. Imenički prostori System.Data- prostor se sastoji od klasa koje čine ADO.NET arhitekturu. Primjer jednog od potprostora: System.Data.OleDb – klase koje čine .NET Framework Data Provider za OleDb-kompatibilne izvore podataka (npr. Access i Excel). Pružaju podršku za spajanje na OleDb bazu podataka, izvršavanje naredbi i čitanje rezultata. Analogno vrijedi za prostore: System.Data.SqlClient System.Data.OracleClient System.Data.Odbc Računarski praktikum 3

  11. Data Provider Data Provider(dobavljač podataka) je biblioteka klasa koja pruža interakciju s bazom podataka, ovisno o protokolu koji je podržan. Ovisno o tipu pružatelja podataka, imena klasa mogu sadržavati tzv. API prefiks (Odbc, OleDb, Sql, Oracle). Primjer: objekt Connection mora imati prefiks (SqlConnection, OdbcConnection...), dok je DataSet neovisan o tipu pružatelja podataka, pa nema prefiks. Računarski praktikum 3

  12. Primjer baze: Northwind Free download na http://www.microsoft.com (SQL200SampleDb.msi) Računarski praktikum 3

  13. DBCommand, DBConnection DBConnection predstavlja vezu s izvorom podataka. Ta veza se može dijeliti među različitim Command objektima. DBCommand objekt omogućuje slanje naredbe (npr. SQL izraza ili spremljene procedure) prema bazi podataka. Ova dva objekta se obično implicitno stvaraju kad se npr. kreira DataAdapter objekt, ali može im se i eksplicitno pristupati. Računarski praktikum 3

  14. Connection Data Source - identifikacija za server(lokalni stroj,naziv domeneili IP adresa). Initial Catalog – ime baze podataka. Integrated Security - npr. ako je postavljeno na SSPI (Security Support Provider Interface), Windows vrši provjeru korisničkog imena i lozinke SqlConnection conn = new SqlConnection( "Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI“); connection string Računarski praktikum 3

  15. Connection SQL Server autentifikacija: User ID(uid) – ime korisnika (konfigurirano u SQL Server-u). Password (pwd) – lozinka koja se slaže s User ID. SqlConnection conn = new SqlConnection( "Data Source=DatabaseServer;Initial Catalog=Northwind; User ID=YourUserID;Password=YourPassword"); zamjenjuju Integrated Security parametar Računarski praktikum 3

  16. Connection Za neke ključne riječi postoji alternativa: Data Source=myServerAddress;Initial Catalog=myDataBase; User Id=myUsername;Password=myPassword; ili Server=myServerAddress;Database=myDataBase; User ID=myUsername;Password=myPassword;Trusted_Connection=False; Računarski praktikum 3

  17. Connection Kod stvaranja string-a za SqlConnection bitno je navesti: • server (Server ili Data Source) • ime baze podataka (Database ili Initial Catalog) • autentifikaciju (Integrated Security ili Trusted Connection). Moguće vrijednosti za Trusted Connection su True, False, Yes, No, SSPI. True je ekvivalentno sa SSPI. Ukoliko je postavljeno na false, mora se navesti User ID i Password (u tom slučaju nije potrebno eksplicitno navoditi Trusted Connection). Računarski praktikum 3

  18. Command SqlCommandcmd = new SqlCommand(); SqlConnectionconn = new SqlConnection(connectionString); cmd.CommandText= “select * from Customers"; cmd.CommandType = CommandType.Text; cmd.Connection = connection; Enumeracija CommandType: StoredProcedure–ime spremljene procedure TableDirect–ime tablice Text – tekst SQL naredbe (default)   Računarski praktikum 3

  19. DataReader Kreiranje ovog objekta je alternativa stvaranju objekata DataSet i DataAdapter. Omogućuje povezani, forward-only, read-only pristup kolekciji tablica. Koristi se često za punjenje kontrola podacima. Dobar je izbor, ukoliko se zahtjeva brzina, ali za manipulaciju podacima bolji izbor je DataSet. Računarski praktikum 3

  20. Primjer baze: Napravit ćemo Access bazu u kojoj se nalaze podaci o studentima koji slušaju Računarski praktikum 8 i njihovim rezultatima iz prvog kolokvija. Baza se sastoji od dvije tablice: • Studenti (sa stupcima JMBAG (4-znamenkasti broj - ključ), Ime, Prezime i Smjer studija) • Prvi kolokvij (sa stupcima JMBAG, Prvi zadatak, Drugi zadatak, Ukupno). Spremimo bazu u RP8.mdb Računarski praktikum 3

  21. Primjer baze: U VisualStudiu: Server Explorer  Data Connections  AddConnection Računarski praktikum 3

  22. Primjer baze: Ispisat ćemo imena i prezimena svih studenata u bazi (u kontrolu tipa Label). tipa Label). using System; using System.Data; using System.Data.OleDb; public partial class Form1 : Form { Labellabel = new Label(); OleDbConnectionconnection = null; OleDbDataReaderreader = null U System.Data.dll asembliju Računarski praktikum 3

  23. Primjer baze: public Form1() { stringconnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data source= D:\baze\RP8.mdb"; connection = new OleDbConnection(connectionString); label.AutoSize = true; Controls.Add(label); InsertTest(); DeleteTest(); UpdateTest(); Ispis(); } Računarski praktikum 3

  24. Primjer baze: void Ispis() { label.Text = ""; try { connection.Open(); OleDbCommandcommand = new OleDbCommand("select * from Studenti", connection); reader = command.ExecuteReader(); while (reader.Read()) label.Text += (reader["Ime"] + " " + reader["Prezime"] + "\n"); // može i label.Text += (reader[1] + " " + reader[2] + "\n"); } Računarski praktikum 3

  25. Primjer baze: catch (Exception e) { MessageBox.Show(e.ToString()); } finally { if (reader != null) reader.Close(); if (connection != null) connection.Close(); } } } Računarski praktikum 3

  26. Primjer baze: void InsertTest() { try { connection.Open(); string insertString = "insert into Studenti([JMBAG], [Ime], [Prezime], [Smjer studija]) values ( '26789', 'Mara', 'Marić', 'MS')"; OleDbCommand command = new OleDbCommand(insertString, connection); command.ExecuteNonQuery(); } Računarski praktikum 3

  27. Primjer baze: catch (Exception e) { MessageBox.Show(e.ToString()); } finally { if (connection != null) connection.Close(); } Računarski praktikum 3

  28. Primjer baze: void DeleteTest() { try { connection.Open(); string deleteString = "delete from Studenti where Ime='Petar‘ "; OleDbCommand command = new OleDbCommand(deleteString, connection); command.ExecuteNonQuery(); } Računarski praktikum 3

  29. Primjer baze: catch (Exception e) { MessageBox.Show(e.ToString()); } finally { if (connection != null) connection.Close(); } Računarski praktikum 3

  30. Primjer baze: void UpdateTest() { try { connection.Open(); string updateString = "update Studenti set Ime='Ivana' where Ime='Andrea‘ "; OleDbCommand command = new OleDbCommand(updateString, connection); command.ExecuteNonQuery(); } Računarski praktikum 3

  31. Primjer baze: catch (Exception e) { MessageBox.Show(e.ToString()); } finally { if (connection != null) connection.Close(); } Računarski praktikum 3

  32. Primjer baze: Računarski praktikum 3

  33. ExecuteScalar Pomoću metodeExecuteScalar( ) dobivamo jednu vrijednost iz tablice (baza sama vraća vrijednost umjesto da pozivamo ExecuteReader( ) i računamo rezultat u kodu). OleDbCommand command= new OleDbCommand("select count(*) from Studenti", connection); int count = (int)cmd.ExecuteScalar(); Dodat ćemo još nekoliko metoda u klasu iz prethodnog primjera. Računarski praktikum 3

  34. ExecuteScalar voidIspisBodova() { label.Text = “Bodovi: \n"; try { connection.Open(); OleDbCommandcommand = new OleDbCommand("select * from [Prvikolokvij]", connection); reader = command.ExecuteReader(); while (reader.Read()) label.Text += (reader[3]+ "\n"); } // + standardni catch – finally blok } Računarski praktikum 3

  35. ExecuteScalar voidIspisiProsjekBodova() { try { connection.Open(); OleDbCommandcommand = new OleDbCommand("select avg(Ukupno) from [Prvikolokvij]", connection); label.Text += String.Format("Prosjek bodova je {0}", command.ExecuteScalar()); } // + catch – finally blok } Računarski praktikum 3

  36. Primjer baze: Pozovemo IspisBodova(); IspisiProsjekBodova(); Računarski praktikum 3

  37. Parametri String u upitu je moguće stvoriti i dinamički, npr. pomoću TextBox kontrole. Sljedeći kod je nesiguran: string ime=“Ana”; SqlCommand cmd = new SqlCommand( "select * from Studenti where Ime =‘”+ime + “’); Bolje je koristiti parametre: Računarski praktikum 3

  38. Parametri using System; using System.Data; using System.Data.OLeDb; public partial class Form1 : Form { Labellabel=new Label(); OleDbDataReaderreader = null; OleDbConnectionconnection = null; TextBoxtextBox = new TextBox(); public Form1() { InitializeComponent(); Računarski praktikum 3

  39. Parametri stringconnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data source= D:\baze\RP8.mdb"; connection = new OleDbConnection(connectionString); label.AutoSize = true; label.Location = new Point(0, 50); textBox.KeyPress += textBox_KeyPress; Controls.Add(label); Controls.Add(textBox); } void textBox_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Enter) IspisImena(); } Računarski praktikum 3

  40. Parametri voidIspisImena() { label.Text = "Studenti u bazi cije ime je " + textBox.Text + ":\n\n"; try { connection.Open(); OleDbCommandcommand = new OleDbCommand("select * from Studenti whereIme=@ime", connection); OleDbParameterparameter = new OleDbParameter(); parameter.ParameterName= "@ime"; parameter.Value= textBox.Text; command.Parameters.Add(parameter); Računarski praktikum 3

  41. Parametri reader = command.ExecuteReader(); while (reader.Read()) label.Text += (reader["Ime"] + " " + reader["Prezime"] + "\n"); } catch (Exception e) { MessageBox.Show(e.ToString()); } finally { if (reader != null) reader.Close(); if (connection != null) connection.Close(); } Računarski praktikum 3

  42. DataSet Objekti tipa DataSet služe za pohranjivanje podataka iz baze. Ne koriste se za interakciju s bazom, već za to služi DataAdapter. DataAdapter otvara vezu te je zatvara čim je obavljena zadana radnja na podacima. Primjer: • otvaranje veze, dobavljanje podataka iz baze u DataSet, zatvaranje veze ili • otvaranje veze, zapisivanje promjene iz DataSet-a u bazu, zatvaranje veze Računarski praktikum 3

  43. DataSet U razdoblju između izvršavanja metoda Fill i Update, veza s bazom podataka je zatvorena i moguće je slobodno čitanje i pisanje podataka u DataSet. Aplikacija ima vezu prema bazi samo kad je to neophodno i time se povećava njezina skalabilnost. Računarski praktikum 3

  44. DataSet.Fill usingSystem; usingSystem.Data; usingSystem.Data.OleDb; class Program { staticvoidMain() { FillTest(); } Računarski praktikum 3

  45. DataSet.Fill voidFillTest() { try { stringconnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data source= D:\baze\RP8.mdb"; stringcommandString = "Select Ime, Prezime from Studenti"; OleDbDataAdapterdataAdapter = new OleDbDataAdapter (commandString, connectionString); DataSetdataSet = new DataSet(); dataAdapter.Fill(dataSet, "Studenti"); DataTabledataTable = dataSet.Tables[0]; Računarski praktikum 3

  46. DataSet.Fill foreach (DataRowdataRow in dataTable.Rows) { Console.WriteLine( String.Format("{0} {1}", dataRow["Ime"], dataRow["Prezime"]); } } catch (Exception e) { Console.Write(e.ToString()); } } } Računarski praktikum 3

  47. DataSet.Update class Program { stringconnectionString; DataSetdataSet; OleDbConnectionconnection=null; OleDbDataReaderreader=null; staticvoidMain(string[] args) { Program p = new Program(); p.connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data source= D:\baze\RP8.mdb"; p.UpdateTest(); } Računarski praktikum 3

  48. DataSet.Update voidUpdateTest() { try { dataSet = new DataSet(); connection = new OleDbConnection(connectionString); OleDbDataAdapterdataAdapter = new OleDbDataAdapter("select JMBAG, Ime, Prezime from Studenti", connectionString); dataAdapter.Fill(dataSet); OleDbCommandBuildercmd = new OleDbCommandBuilder(dataAdapter); Računarski praktikum 3

  49. DataSet.Update DataTabledataTable = dataSet.Tables[0]; foreach (DataRowdataRow in dataTable.Rows) if ((dataRow["Ime"]).ToString() == "Hrvoje") dataRow["Ime"] = "Lovro"; //provjeravamo promjene u DataSet-u foreach (DataRowdataRow in dataTable.Rows) Console.WriteLine(String.Format("{0} {1}", dataRow["Ime"], dataRow["Prezime"])); dataAdapter.Update(dataSet); Računarski praktikum 3

  50. DataSet.Update connection.Open(); OleDbCommandcommand = new OleDbCommand("select * from Studenti", connection); reader = command.ExecuteReader(); //provjeravamo promjene u bazi while (reader.Read()) Console.WriteLine(String.Format("{0} {1}", reader["Ime"], reader["Prezime"])); } catch (Exception e) { MessageBox.Show(e.ToString()); } finally { if (reader != null) reader.Close(); if (connection != null) connection.Close(); } } Računarski praktikum 3

More Related