Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

28-09-2007FEN Databaser/dbAdgang11 Databaseadgang fra C#: ADO.NET (ActiveX Data Objects)

Lignende præsentationer


Præsentationer af emnet: "28-09-2007FEN Databaser/dbAdgang11 Databaseadgang fra C#: ADO.NET (ActiveX Data Objects)"— Præsentationens transcript:

1 28-09-2007FEN Databaser/dbAdgang11 Databaseadgang fra C#: ADO.NET (ActiveX Data Objects)

2 28-09-2007FEN Databaser/dbAdgang12 ADO.NET - Arkitektur Non Microsoft Vi bruger den her

3 28-09-2007FEN Databaser/dbAdgang13 Database library Databasetilgang tilbydes af namespace System.Data.* Klasserne kendes samlet som ADO.NET –“native support” til SQL Server og Oracle –Supporterer andre DBMS’er via den ældre OleDB-teknologi –Kræver kendskab til SQL og C#-programmering Der bruges forskellige klasser til de forskellige databaser, fx findes der en OleDbCommand, en SqlCommand og en OracleCommand. Alle implementerer IDbCommand. Anvendte namespaces: –generelt: System.Data, System.Data.Common –SQL Server: System.Data.SqlClient –Oracle: System.Data.OracleClient –OleDB: System.Data.OleDb

4 28-09-2007FEN Databaser/dbAdgang14 ADO.NET Arkitektur

5 28-09-2007FEN Databaser/dbAdgang15 To måder at tilgå DB på Connected: –Åbn connection –Læse-/Skrivetilgang (select, insert, update og delete) via Command-objekt –Ved læsetilgang (select) returneres et DataReader-objekt –Luk Connection Disconnected: –Fyld et DataSet-objekt (kopi af dele af databasen) vha. en DataAdapter –DataAdapter indpakker SQL-statement(s) –DataSet-objekt indeholder DataTable-objekter –DataTable-objekter indeholder collections af rækker og kolonner Mere herom næste gang

6 28-09-2007FEN Databaser/dbAdgang16 Overblik - connected databaseadgang Tre skridt: 1.åbn connection til databasen 2.eksekver SQL for at opdatere/læse DB 3.luk connection

7 28-09-2007FEN Databaser/dbAdgang17 1: Åbn connection Connections åbnes på grundlag af en connection string –Kan findes i Visual Studio: // Create and open a connection. SqlConnection cn = new SqlConnection(); cn.ConnectionString = " Data Source =PCM06073\\SQLEXPRESS;” +”Initial Catalog=vw;Integrated Security=True;"; cn.Open(); ShowConnectionStatus(cn); // or should it be? cn.ConnectionString = “ Server =PCM06073\\SQLEXPRESS;” +”Initial Catalog=vw;Integrated Security=True;"; cn.Open(); Data Source or Server?

8 28-09-2007FEN Databaser/dbAdgang18 Connection strings Connection strings er produkt-afhængige og som regel ikke særligt veldokumenterede Hvor kan man hente hjælp? –www.connectionstrings.com –www.able-consulting.com/ADO_conn.htmwww.able-consulting.com/ADO_conn.htm Til MS SQL Server kan Visiual Studio hjælpe

9 28-09-2007FEN Databaser/dbAdgang19 2: Hent records Hent records vha. SQL-Select // Create a SQL command object. string strSQL = "SELECT * FROM Car"; SqlCommand myCommand = new SqlCommand(strSQL, cn); #region Data reader code // Obtain a data reader ala ExecuteReader(). SqlDataReader myDataReader; myDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection); // Loop over the results. while (myDataReader.Read()) { for (int i = 0; i < myDataReader.FieldCount; i++) { Console.Write("{0} = {1} ", myDataReader.GetName(i), myDataReader.GetValue(i).ToString().Trim()); } Console.WriteLine(); }

10 28-09-2007FEN Databaser/dbAdgang110 3: Luk connection Husk at lukke connection… –Så andre kan få adgang til databasen dbConn.Close();

11 28-09-2007FEN Databaser/dbAdgang111 Opgave Lav et program, som læser alle ansatte I Company-databasen

12 28-09-2007FEN Databaser/dbAdgang112 Design 1: SQL i domæneklasserne Indlejret SQL placeres i hver af domæneklasserne. Dette design er hurtigt at implementere, og kan bruges ifm. meget små applikationer og prototyper AnsatProjektDB.zipAnsatProjektDB

13 28-09-2007FEN Databaser/dbAdgang113 Design 1 (simpleste) Domæneklasser DB SQL Tabeller

14 28-09-2007FEN Databaser/dbAdgang114 Design 2 DB-lag mellem domæne og Database Den indlejrede SQL placeres i dataklasser. Dataklasserne er placeret i et lag mellem domæneklasserne og databasen Holder udmærket for små systemer (prototyper og mindre end 40-50 domæneklasser) Små ændringer resulterer stadig i kildekodeændringer. Fordelen frem for design1 er, at man har isoleret SQL- koden i egne klasser. Dataklasserne kan evt. erstattes af stored procedures. AnsatProjektDBEksempel.zip

15 28-09-2007FEN Databaser/dbAdgang115 Design 2 (næstsimpleste) Domæneklasser DataAccess- klasser DB SQL Tabeller Objekter

16 28-09-2007FEN Databaser/dbAdgang116 Design 3 Domæneklasser Robust Persistenslag DB SQL Tabeller Objekter

17 28-09-2007FEN Databaser/dbAdgang117 “Rigtig” n-tier arkitektur

18 28-09-2007FEN Databaser/dbAdgang118 Eksempel på realisering af domænemodel (design 2) Del af design-klassediagram i et system til registrering af ansatte og projekter AnsatProjektDbEksempel.zip

19 28-09-2007FEN Databaser/dbAdgang119 AnsatProjekt Ved load fyldes GUI-komponenterne –Først med projektoplysninger: private void Form1_Load(object sender, System.EventArgs e){ ArrayList projekter = c.FindAlleProjekter(); foreach (Projekt p in projekter){ this.lstProjekter.Items.Add(p); if(!this.cmbAfdeling.Items.Contains(p.Afdeling)) this.cmbAfdeling.Items.Add(p.Afdeling); this.cmbAfdeling.SelectedItem = this.cmbAfdeling.Items[0]; }

20 28-09-2007FEN Databaser/dbAdgang120 AnsatProjekt Ved load fyldes GUI-komponenterne –Derefter med ansatoplysninger: ArrayList ansatte = c.FindAlleAnsatte(); foreach (Ansat a in ansatte) { this.cmbAnsat.Items.Add(a); } this.cmbAnsat.SelectedItem = this. cmbAnsat.Items[0]; }

21 28-09-2007FEN Databaser/dbAdgang121 AnsatProjekt Lad os følge knappen Tilknyt Medarbejder gennem systemet Findes i controller-klassen – tager Ansat, Projekt og timer som parametre Controlleren kalder ned i Projektklassen, som jo har ansvaret for oprettelsen af en forekomst af ArbejderPaa

22 28-09-2007FEN Databaser/dbAdgang122 AnsatProjekt Klassen AccessDb –Indkapsler en DbCommand (som skifter SQL- statement alt efter hvem der bruger den) –Styrer den ene connection projektet arbejder med –Hvorfor ikke bare en connection pr metode der skal tilgå db? Connections er en knap ressource Svært at holde styr på: –Hvad hvis en db-metode kalder en anden db-metode – hvem åbner og hvem lukker?

23 28-09-2007FEN Databaser/dbAdgang123 Opgaver Prøv det! –Fx til VW-databasen


Download ppt "28-09-2007FEN Databaser/dbAdgang11 Databaseadgang fra C#: ADO.NET (ActiveX Data Objects)"

Lignende præsentationer


Annoncer fra Google