ASP.NET - Department of Immunopathology, PGIMER Chandigarh

Werbung
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
Herunterladen