440 likes | 663 Vues
Razvoj poslovnih aplikacija - vježbe -. Jelena Zovko 01.04.2014. Korištenje podataka u aplikaciji. SQL Server (ekstenzija *.mdf) Korištenje postojeće baze podataka ili kreiranje nove. 1. Primjer.
E N D
Razvoj poslovnih aplikacija- vježbe - Jelena Zovko 01.04.2014.
Korištenje podataka u aplikaciji • SQL Server (ekstenzija *.mdf) • Korištenje postojeće baze podataka ili kreiranje nove
1. Primjer • Kreirati odgovarajuću bazu podataka (entiteti, atributi i veze) za problem evidentiranja djelatnika i odjela u kojem rade.
Postupak • Kreiranje dokumenta posao.mdf • Definiranje tablica, veza te unos podataka
Postupak • Solution explorer – dodati Service Based Database • Server Explorer • Tables ->Add New Table • Database Diagrams->Add New Diagram
Postupak • Kreiranje novog izvora podataka – Data Source • Kreiranje odgovarajućeg okruženja: forme
Kreiranje Data Seta • Data->Show Data Sources->Add New Data Source
Rad s bazom • ADO.NET – model za pristupanje podacima • nasljednik prijašnjeg koncepta ADO – ActiveX Data Objects • bitna razlika: nakon pristupanja podacima, veza s bazom se prekida i radi se nad podacima koji su privremeno smješteni u memoriji računala
ADO.NET • dvije središnje komponente: • DataSet • Data Provider
DataSet • sadrži: • DataTable • DataRelation
Data Providers • ADO.NET providers: • Data Provider za SQL Server (System.Data.SqlClient) • Data Provider za OLEDB (System.Data.OleDb) • Data Provider za ODBC (System.Data.Odbc) • Data Provider za Oracle (System.Data.OracleClient)
Data Provider • sadrži: • Connection object (SqlConnection) • Command object (SqlCommand) • DataReader object (SqlDataReader) • DataAdapter object (SqlDataAdapter)
ADO.NET Data Provider Form DataSet DataAdapter Connection Command DataReader
Prikaz podataka • Prikaz podataka iz DataSet-a na formi (prevlačenjem) • Data binding • Prikaz podataka pisanjem koda: • više slogova u tabličnom obliku (DataGrid) • jedan slog (preko TextBox-ova) • jedan atributa (u TextBox)
2. Primjer • Kreirati aplikaciju s početnom formom (MdiContainer), izbornikom (MenuStrip) te dodatnim formama koje se otvaraju preko kreiranog izbornika • Kreirati Data Set iz baze posao.mdf, ali NE KOPIRATI bazu u projekt
3. Primjer • Prikazati podatke iz tablice djelatnik prevlačenjem iz Data Source-a
Data Binding • koncept kojim se ostvaruje veza između upravljača na formi i izvora podataka • Izvori podataka: razni (DataSet, DataTable, DataColumn, DataView, DataViewManager...) • Dvije metode data bindinga: • Simple binding - povezivanje jedne vrijednosti na kontrolu • Complex binding - povezivanje skupa vrijednosti na kontrolu
4. Primjer • Povezati TextBox s bazom posao.mdf tako da se u njemu prikaže naziv odjela.
5. Primjer • Povezati DateTimePicker upravljač tako da se prikazuje datum zaposlenja djelatnika.
6. Primjer • Povezati DataGridView s bazom tako da se prikazuje tablica odjel (pomoću binding opcije).
7. Primjer • Povezati se kodom s bazom posao.mdf te prikazati podatke u DataGrid-u
1. Korak • dodati odgovarajući namespace • u našem slučaju: using System.Data.SqlClient;
2. Korak • definiranje stringa za povezivanje (connection string): naziv providera i točna putanja string tekstVeze = "Data Source=.\\SQLEXPRESS; AttachDbFilename = C:\\posao.mdf; Integrated Security=True; Connect Timeout=30; User Instance=True”;
3. Korak • kreiranje nove instance za SqlConnection pomoću stringa veza koji je prije deklariran: SqlConnection veza= new SqlConnection(tekstVeze); • te otvaranje definirane veze: veza.Open();
4. Korak • pomoću DataAdapter-a se puni DataTable te se DataTable pridruži DataGridu (koji je stavljen na formu) DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDataAdapter (“SELECT * FROM Djelatnik”, veza) da.Fill(dt); dataGridView1.DataSource = dt;
8. Primjer • Prikazati podatke u DataGridView-u o onom djelatniku čija se šifra (ID) unese u TextBox
Rješenje ...povezivanje... int id; id = Convert.ToInt16( textBox1.Text); DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDataAdapter ("SELECT * FROM Djelatnik where ID=" + id, veza); da.Fill(dt); dataGridView1.DataSource = dt;
9. Primjer • Odabirom naziva odjela iz padajućeg izbornika ComboBox-a prikazuje se šifra tog odjela u TextBox-u
Rješenje ...povezivanje... int id = Convert.ToInt16(comboBox1.SelectedValue); textBox2.Text = id.ToString();
10. Primjer (dvije tablice) • Prikazati sve podatke o djelatnicima koji rade u odjelu čija se šifra (ID) unese u textBox
11. Primjer (dvije tablice) • Odabirom naziva odjela iz padajućeg izbornika ComboBox-a prikazuju se svi djelatnici koji rade u tom odjelu +(zajedno s nazivom odjela i njegovom lokacijom) int id = Convert.ToInt16(comboBox1.SelectedValue); DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDataAdapter ("SELECT D.ID, D.Ime,D.Prezime,D.Posao,D.DatumZaposlenja,D.Placa, O.Naziv,O.Lokacija FROM Djelatnik D, Odjel O where D.IDOdjel=O.ID AND IDOdjel=" + id, veza); da.Fill(dt); dataGridView2.DataSource = dt;
12. Primjer • U listBox-u se nalaze šifre svih odjela te se klikom na neki od njih prikazuju (u GridView-u) svi podaci o tom odjelu.
Rješenje ...povezivanje... int id; id = Convert.ToInt16( listBox1.SelectedValue); DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Odjel where ID=" + id, veza); da.Fill(dt); dataGridView1.DataSource = dt;
13. Primjer • Prikazati podatke o samo jednom djelatniku (čija se šifra unese) u odvojenim textBox-ovima (koristi se DataReader)
Rješenje int id; id = Convert.ToInt16(textBox1.Text); string naredba = "SELECT Ime,Prezime,Posao,Placa,DatumZaposlenja FROM Djelatnik WHERE ID=" + id; SqlCommand comm = new SqlCommand(naredba, veza); SqlDataReader citac = comm.ExecuteReader(); citac.Read(); textBox2.Text = citac.GetString(0); textBox3.Text = citac.GetString(1); if (!citac.IsDBNull(2)) textBox4.Text = citac.GetString(2); textBox5.Text = citac.GetDecimal(3).ToString(); if (!citac.IsDBNull(4)) textBox6.Text = citac.GetDateTime(4).ToString(); citac.Close();
14. Primjer • Prikazati najveći ID koji je unesen za djelatnika. string naredba = "SELECT MAX(ID) FROM Djelatnik"; SqlCommand comm = new SqlCommand(naredba, veza); SqlDataReader citac = comm.ExecuteReader(); citac.Read(); int sifra = citac.GetInt32(0); textBox1.Text = sifra.ToString(); citac.Close(); veza.Close();
15. Primjer • Prikazati sumu svih plaća (iz tablice djelatnik). string naredba = "SELECT SUM(Placa) FROM Djelatnik"; SqlCommand comm = new SqlCommand(naredba, veza); SqlDataReader citac = comm.ExecuteReader(); citac.Read(); decimal suma = citac.GetDecimal(0); textBox2.Text = suma.ToString(); citac.Close(); veza.Close();
16. Primjer • Omogućiti unos novog odjela preko TextBox-ova string unos = "INSERT INTO Odjel VALUES (" + textBox3.Text + ",'" + textBox4.Text + "','" + textBox5.Text + "')"; SqlCommand comm = new SqlCommand(unos, veza); comm.ExecuteNonQuery(); textBox3.Text = ""; textBox4.Text = ""; textBox5.Text = ""; MessageBox.Show("Uspjesno ste unijeli podatke");
17. Primjer • Omogućiti unos novog sloga (odjel) bez unošenja šifre. Šifra se treba automatski odrediti i unijeti (nevidljivo korisniku). • Program treba obavijestiti korisnika (putem MessageBox-a) o uspješnom unosu • Kada program uspješno proradi, primijeniti i try...catch kod
18. Primjer • Omogućiti unos novog djelatnika s tim da se naziv odjela odabire iz ComboBox-a
Pitanja? • ....