ASP.NET Web‐Datenbanken‐Seminar Elitenstudiengang Software‐Engineering Veronika Bauer Cristina Kadar 19.03.2009 Gliederung • .NET Framework • ASP.NET Grundlagen – Server Controls • Datenbankzugriff – ADO.NET – LINQ • Anwendungsidee 3/19/2009 ASP.NET Wie funktioniert .NET? Code in C# Code in .NET Sprache C# Compiler Passender Compiler Common Intermediate Language Common Language Runtime Sprachen in denen der Programmierer die SW schreibt „Universalsprache“ Just‐in‐Time Compiler 3/19/2009 101011111110000001 ASP.NET Die plattformspezifische CLI übersetzt CIL in nativen Maschinencode Was umfasst .NET? • Eine Laufzeitumgebung (Common Language Runtime) • Eine objektorientierte Klassenbibliothek (Base Class Library) • Programmiersprachen: C#, VB.NET, Managed C++ • WPF, WCF, WF • Visual Studio 3/19/2009 ASP.NET Common Language Runtime • Basiert auf einer virtuellen Maschine mit eigenem Befehlsatz (CIL) • Gemeinsames Typsystem (CTS) • Automatische Speicherbereinigung (garbage collection) • Verifier 3/19/2009 ASP.NET Base Class Library • Graphische Benutzeroberflächen (Windows Forms) • Web‐Oberflächen (Web Forms) • Datenbankanschluss (ADO.NET) • XML • Kollektion‐Klassen, Threading, Reflection, etc. 3/19/2009 ASP.NET C# • Einfache Codevererbung und mehrfache Schnittstellenvererbung • Einheitliches Typsystem: Referenztypen und Werttypen • Index‐Operator für Collections, Strings, Arrays • Attribute, Delegates • Reflection • Generische Typen und Methoden • LINQ 3/19/2009 ASP.NET Windows Presentation Foundation • Grafische Benutzerschnittstellen für: – klassische Desktop‐Anwendungen – Browserbasierte Anwendungen – Dokumente • Beschreibung durch XAML: zu jedem XAML‐ Element existiert eine gleichnamige Klasse • Komplett vektorbasierte Darstellung • Auf Zielsystem installieren oder im IE ablaufen • Silverlight: stark reduzierte Version von WPF 3/19/2009 ASP.NET Windows Communication Foundation • Dienstorientierte Kommunikationsplattform für verteilte Systeme • Ein WCF‐Dienst besitzt Endpunkte mit: – Addresse: besteht aus einer URI mit Protokollangabe, Pfad und Port – Bindung: verwendete Protokolle (z.B. HTTP, TCP, Named Pipes) und Formate (z.B. SOAP) – Vertrag: definiert die Operationen 3/19/2009 ASP.NET Windows Workflow Foundation • Infrastruktur für computergestützte Arbeitsabläufe • Erstellung von aus Aktivitäten und Zuständen bestehende Workflows • Klassenbibliothek mit Lauftzeitumgebung • In .NET‐Code oder XAML ausdruckbar 3/19/2009 ASP.NET Was bringt .NET? • • • • • Komfort für den Entwickler Interoperabilität Robustheit und Sicherheit Portabilität Einheitliche SW für Desktop und Web Ausführungsgeschwindigkeit 3/19/2009 ASP.NET Was ist ASP.NET? • Active Server Pages .NET • Serverseitige Technologie für Webanwendungen • Fester Bestandteil des .NET Frameworks • Sprachen: VB.NET und C# (theoretisch alle CLR‐kompatiblen Sprachen möglich) 3/19/2009 ASP.NET Wichtigste Eigenschaften ASP.NET ist • Objektorientiert • Eventgetrieben • Multi‐Device‐ und Multi‐Browser‐fähig 3/19/2009 ASP.NET Wie funktioniert ASP.NET? • • • • • Page Life Cycle Provider Model Code Model Server Side Controls Event Handler 3/19/2009 ASP.NET ASP.NET Page Lifecycle ‐ First Server Erster Request von Client Client HTML 3/19/2009 ASP.NET ASP.NET Page Lifecycle ‐ Postback Postback Request von Client Loading View State Loading Postback Data Client HTML Server 3/19/2009 ASP.NET ASP.NET Provider Model • Seite wird mit einzelnen ‚simple providers‘ gestaltet • Änderungen nur in Provider, nicht in Seite Flexibilität 3/19/2009 ASP.NET ASP.NET Code Model • Inline code – HTML und Logik in einem Dokument – Für einfache Seiten • Code‐behind: Aufteilung der Webseite in – .aspx – Dokument mit HTML und Control tags – .cs – Dokument mit Quelltext – Für komplexe Anwendungen 3/19/2009 ASP.NET Code – Behind Mechanismus Base Page Klasse Spezielles Verhalten Anweisungen zur Initialisierung 3/19/2009 Code‐ Behind Klasse Generierte _aspx Klasse ASP.NET Grund‐ funktionen Generierte partielle Klasse Control Declarations Server Controls • • • • • • HTML server controls System.Web.UI.HTMLControls Web controls System.Web.UI.WebControls Rich controls Validation controls Data controls ... 3/19/2009 ASP.NET Web Controls • z.B. Button: <asp:Button ID="ButtonNET" runat="server" Text="Button“ Width=“80px” Font‐Size=“Large” /> • Einheitliches Objektmodell • Eventgesteuertes Programmiermodell 3/19/2009 ASP.NET Events • Code kann auf Page Events reagieren : – Page_Load – Page_Unload • Code kann auf Controler Events reagieren: – Button1_Click – TextBox1_Changed • Automatisches Postback 3/19/2009 ASP.NET Event handlers • .aspx <asp:TextBox ID="TB1" runat="server" AutoPostBack="true" OnTextChanged="CtrlCh"/> <asp:CheckBox ID="CB1" runat="server" AutoPostBack="true" OnCheckedChanged="CtrlCh"/> <asp:Button ID="B1" runat="server" Text="Click" AutoPostBack="true" OnClick="ButtonCl"/> • .cs protected void CtrlCh(Object sender, EventArgs e) { Response.Write(((Control)sender).ID + " changed"); } protected void ButtonCl(Object sender, EventArgs e) { Response.Write("You clicked me!"); } 3/19/2009 ASP.NET Validation Controls • Client‐ und Serverseitig • RangeValidator: <asp:RangeValidator ID="RangeValidator1" ControlToValidate="TextBox1" MinimumValue="1" MaximumValue="100" Type="Integer" Text="The value must be from 1 to 100!" runat="server" /> • auch: RequiredFieldValidator, RegularExpressionValidator, ... 3/19/2009 ASP.NET Data Controls und Data Binding • Single‐value vs. repeated‐value • .aspx <asp:Image ID=”I1" runat="server" ImageUrl=’<%# GetPath() %>’/> <asp:ListBox ID="LB1" runat="server" /> • .cs protected string GetPath() { return „db.gif“; } protected void Page_load(object sender, System.EventArgs e) { List<String> source = new List<String> {"Cris","Veronika"}; ListBox1.DataSource = source; this.DataBind(); } 3/19/2009 ASP.NET ASP.NET und Datenbanken • ADO.NET – Data Provider – DataSet • LINQ 3/19/2009 ASP.NET ADO.NET .NET Klassen für • Zugriff auf DB – Relational – XML • Datenverarbeitung Angepasst an Web‐Umgebung: Verbindungen werden nur kurz offengehalten 3/19/2009 ASP.NET ADO.NET Data Provider • Implementiert optimiert für spezifische DB: – Connection – Command – DataReader – DataAdapter • Standardisiert • Spezifische Objekte: OracleConnection, SqlConnection... 3/19/2009 ASP.NET 1. ADO.NET Connection Zutaten für eine Connection 1. Connection String in web.config eintragen <configuration> … <connectionStrings> <add name="WebDB" connectionString="Data Source=localhost; Initial Catalog=WebDB; user id=sa; password=asp.net"/> </connectionStrings> </configuration> 3/19/2009 ASP.NET 1. ADO.NET Connection Zutaten für eine Connection 2. Connection String holen 3. Connection Objekt instantiieren string connectionString = WebConfigurationManager. ConnectionStrings[“WebDB”] .ConnectionString; SqlConnection con = new SqlConnection(connectionString); 3/19/2009 ASP.NET 1. ADO.NET Connection Verwenden einer Connection: 1) try – catch – finally SqlConnection con = new SqlConnection(connectionString); try { con.Open(); } catch (Exception err) { //Handle error } finally { con.Close(); } 3/19/2009 ASP.NET 1. ADO.NET Connection Verwenden einer Connection: 2) using SqlConnection con = new SqlConnection(connectionString); using (con){ con.Open(); //do something } //finally fällt weg //Connection wird automatisch geschlossen 3/19/2009 ASP.NET 1. ADO.NET Connection Connection Pooling: • Unterstützt von ADO.NET Providern • Standardmäßig aktiviert • Eintrag von Min/Max in Connection String connectionString="Data Source=localhost; Initial Catalog=WebDB; user id=sa; password=asp.net; Min Pool Size=10" 3/19/2009 ASP.NET 2. ADO.NET Command • Data definition tasks • Data manipulation tasks 1. Wähle Command‐Typ 1. Text 2. StoredProcedure 2. Setze Text 3. Binde Command an Connection 4. Ausführung 3/19/2009 SqlCommand cm = new SqlCommand(); cm.CommandType = CommandType.Text; cm.CommandText = “SELECT * FROM X“; cm.Connection = con; SqlDataReader dr = cm.ExecuteReader(); ASP.NET ADO.NET DataReader • Einfachster Weg auf Resultate von Commands zuzugreifen • Forward‐only & Read‐only Stream SqlDataReader dr = cm.ExecuteReader(); while(dr.Read()){ //do something } 3/19/2009 ASP.NET ADO.NET Besondere Features Der SqlProvider unterstützt: • Nullable Data Types * • Spezielles Command Behaviour * • Batch Statements durch Multiple Record Sets * • Parameterisierte Commands • Stored Procedures • Transaktionen und Sicherungspunkte 3/19/2009 ASP.NET Backup: Nullable Data Types • Übernahme von Null‐Werten in Ergebnissen • Datentypen können Wert und Null‐ Referenzen annehmen int? nullableInt; if(dataReader[“amount“] == DBNull.Value) nullableInt = null; else nullableInt =(int?)reader[“amount”]; 3/19/2009 ASP.NET Backup: Command Behaviour CommandBehaviour als Parameter der ExecuteReader‐Methode (z.B. CloseConnection) SqlDataReader reader = cm.ExecuteReader( CommandBehaviour.CloseConnection ); //do something //Connection wird mit reader zuammen //automatisch geschlossen reader.Close(); 3/19/2009 ASP.NET Backup: Multiple Record Sets Mehrere Record Sets als Ergebnis von: • Stored Procedures • Batch Queries string sql= “SELECT * FROM ProductCat;” + “SELECT * FROM Products;” //create and execute DataReader do{ while(reader.Read()){ //process results } } while(reader.NextResult()); 3/19/2009 ASP.NET ADO.NET DataSet • Standardisierter Datencontainer • Verwaltet Daten im Speicher – Kopie der geholten Daten – Disconnected – Änderungen werden nur explitit in DB übertragen • Providerunabhängig Einheitlicher Code für Modifizierung von Daten • Für komplexe Datenmanipulationen 3/19/2009 ASP.NET Evaluierung ADO.NET Hohe Flexibilität Umfangreiche Funktionen Gute Abstraktion des Datenzugriffs Overhead für einfache Aufgaben 3/19/2009 ASP.NET LINQ • Language Integrated Query • Die zentrale Neuerung für .NET 3.5 • Neue Technologie , die das Implementieren aller Arten von Datenzugriffen vereinfacht und vereinheitlicht • Erweiterung der Sprachsyntax von VB 2008 und C# 2008 3/19/2009 ASP.NET Die LINQ‐Architektur Objekt A LINQ C# LINQ to Objects Objekt B Objekt C LINQ to ... VB.NET Datenbank LINQ to SQL ... <User> LINQ to XML 3/19/2009 ASP.NET <Name> <Language> <Age> LINQ Ausdrücke List<string> match = new List<string>(); foreach (User u in users) { if (u.Name.StartsWith("Chris")) match.Add(u.Name); } Filterung IEnumerable<string> match; match = from u in users where u.Name.StartsWith("Chris") select u.Name; Projektion 3/19/2009 ASP.NET User Name Language Age Filterung mit selbstdefinierten Funktionen private bool TestName(string n) { return n.StartsWith("Chris") } IEnumerable<string> match; match = from u in users where u.Age > 25 && TestName(u.Name) select u.Name; 3/19/2009 ASP.NET Sortierung IEnumerable<string> match; match = from s in source orderby s.Age select s.Name + “ “ + s.Age; 3/19/2009 ASP.NET Gruppierung und Aggregation // Gruppierung var match = from u in users group u by u.Age into g IEnumerable<int> select g.Key; IGrouping<int,User> // Aggregation Extension method var match = from u in users group u by u.Age into g select new {AgeGr = g.Key, Users=g.Count()}; //auch Max(), Min(), Average() 3/19/2009 ASP.NET Extension Methods & lambda Ausdrücke var match = from u in users group u by u.Language into g select new {Lan = g.Key, MaxAge=g.Max(u => u.Age), IEnumerable<int,int,int,int> MinAge=g.Min(u => u.Age), AverageAge=g.Average(u => u.Age)}; 3/19/2009 ASP.NET LINQ to SQL System.Data.Linq.dll • Übersetzt LINQ in SQL • Die Abfragen sind ausgeführt nur wenn die Daten auch benötigt werden (deferred execution) • Läuft nur mit MS SQL Server 3/19/2009 ASP.NET 1. Relationales Modell ‐> OOP Modell • Klasse mit Attributen: – Table: Name – Column: Name, IsPrimaryKey, IsDbGenerated... [Table(Name="users")] public class User { [Column(IsPrimaryKey=true)] public int ID { get; set; } [Column] public string Name { get; set; } public User(int id, string name) { ID = id; name = Name; } public User() { } } 3/19/2009 ASP.NET 2. Connection & DataContext • Verbindung wie vorher • DataContext instanziieren: DataContext dataContext = new DataContext(connectionString); Table<User> table = dataContext.GetTable<User>(); 3/19/2009 ASP.NET 3. Abfrage definieren & Ergebnisse zuweisen IEnumerable<string> match; match = from u in table where u.Name.StartsWith("Chris") select u.Name; In SQL? match.toString() GridView.DataSource = match; GridView.DataBind(); //oder foreach Bearbeitung SELECT [t0].[Name] FROM [users] AS [t0] WHERE [t0].[Name] LIKE @p0 3/19/2009 ASP.NET 4. Änderungen vornehmen (insert) User newU = new User(); newU.ID = 5; newU.Name = "MyUser"; table.InsertOnSubmit(newU); dataContext.SubmitChanges(); 3/19/2009 ASP.NET Bewertung LINQ to SQL weniger Code flexiblere Abfrageausdrücke Change tracking, Batch Updates beschränkt auf MS SQL Server nicht für ASP.NET geeignet 3/19/2009 ASP.NET Wie lernt Ihr am liebsten ein fremdes Wort ? 3/19/2009 ASP.NET Wie lernt Ihr am liebsten ein fremdes Wort ? • • • • • • Übersetzung in Muttersprache Synonyme in Zielsprache Aussprache Photo Definition/Erklärung in Zielsprache Ein Lied mit dem gleichen Thema 3/19/2009 ASP.NET language2go • Multi‐Suche – Mehrsprachig – Text und Multimedia (Audio, Video) • Suchhistorie – Letzten/top 10 Suche – Beliebten 10 Kategorien • Benutzeranpassung 3/19/2009 ASP.NET APIs • • • • • Google AJAX Language WordNet Flickr / Picasa Lastfm / Youtube Web Definitionen, z.B. Wikipedia 3/19/2009 ASP.NET Welche Tools? • Visual Studio 2008 Professional Edition (.NET Framework 3.5 mit ASP.NET und C#) • MS SQL Server 2005 • IIS v5.0 3/19/2009 ASP.NET Quellen • Pro ASP.NET 3.5 in C# 2008, M. MacDonald & M.Szpuszta, Apress, 2007 • .NET 3.5 : WPF,WCF, LINQ, C#2008, VB2008 und ASP.NET AJAX, H. Schwichtenberg & Co., Hanser, 2008 • Microsoft ASP.NET Developer Center http://msdn.microsoft.com/en‐us/asp.net/default.aspx, 19. März 2009 • W3Schools ASP.NET Tutorial: http://www.w3schools.com/aspnet/default.asp, 19. März 2009 3/19/2009 ASP.NET