microsoft academic program datenzugriff mit framework 2.0 student technology conference 2005

20
Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Upload: uschi-schiebel

Post on 05-Apr-2015

106 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Microsoft Academic Program

Datenzugriff mit Framework 2.0

Student Technology Conference 2005

Page 2: Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005

Datenzugriff mit Framework 2.0

Dirk PrimbsDeveloper EvangelistMicrosoft Deutschland GmbH

Page 3: Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Agenda

• ADO.NET Revisited• Neue Objekte für alle Provider• Neu für den Zugriff auf SQL Server

Page 4: Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005ADO.NET revisited

Managed Provider

DataReader

CommandConnection

Sync

Controls,Designers,

Code-gen, etc

DataSet

XmlReader

XmlText-Reader

XmlNode-Reader

XSL/T, X-Path, etc

XmlData-Document

DataAdapter

Page 5: Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Client-Side Data Access

• In System.Data sind drei Arten von Änderungen zu finden:– Features in Kombination mit SQL Server

2005– Features für die Arbeit mit allen

Datenbanken– Erweiterungen des Objektmodells

Page 6: Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005SQL NAtive Client (SNAC)

• SNAC trennt SQL client und MDAC– MDAC gehört zum Betriebssystem und

• wird von SQL Server benutzt, aber • nicht von SQL Server 2005 ausgerollt

– SNAC enthält• neue OLE DB Provider• neue ODBC Treiber

– SNAC kann zusätzlich zum bisherigen Treibermodell• Snapshot Isolation• MARS• "max" Data Type• UDT und XML Datentypen

– System.Data.SqlClient ist nicht von SNAC abhängig

Page 7: Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005MARS

• Vor SQL Server 2005 konnte SQL Server keine mehrfach verwendbaren Verbindungen unterhalten– Pro Verbindung nur ein DataReader– In ADO hat man deswegen einfach mehrere Verbindungen unterhalten

• Multiple Active Result Sets kann Verbindungen mehrfach einsetzen

Page 8: Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Das Problem...

SqlConnection conn = new SqlConnection( "server=.;integrated security=sspi;database=pubs");SqlCommand cmd = new SqlCommand( "select * from authors",conn);conn.Open();SqlDataReader rdr = cmd.ExecuteReader();Console.WriteLine("got first reader");

// zweiter Reader auf der gleichen Verbindung// das wird schiefgehen…cmd.CommandText = "select * from jobs";SqlDataReader rdr2 = cmd.ExecuteReader();

// hier kommen wir nie anrdr.Read();rdr2.Read();Console.WriteLine(rdr2[0]);

Page 9: Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Die Lösung mit MARS

// MARS ist in SQL Server 2005 per default verfügbarSqlConnection conn = new SqlConnection("server=zmv43;integrated security=sspi;database=pubs");

SqlCommand cmd = new SqlCommand("select * from authors",conn);

// wir brauchen eine eigene Command-Instanz für das zweite KommandoSqlCommand cmd2 = new SqlCommand("select * from jobs",conn);conn.Open();SqlDataReader rdr = cmd.ExecuteReader();

// Jetzt klappt’s auch mit dem zweiten ReaderSqlDataReader rdr2 = cmd2.ExecuteReader();rdr2.Read();rdr.Read();

Console.WriteLine(rdr[0]);Console.WriteLine(rdr2[0]);

Page 10: Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Dependencies und Notifications

• “Benachrichtigt” Benutzer, wenn sich eine Row in der Datenquelle ändert– zum gezielten Erneuern von Daten im Cache– um Grids und Listboxen zu aktualisieren

• In SQL Server 2005 basieren Notifications auf dem SQL Service Broker

• Für SQL Server 2000 arbeiten Query Notifications mit Polling auf Systemtabellen

Page 11: Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005SqlDependency

• Kann verwendet werden um SqlCommand-Objekte an Notifications zu binden

• Feuert ein Event wenn eine Änderung in der Datenbank das Kommando betrifft

Current Sales €10034.63

select sum(cost) from dbo.sales

insert into sales ...

Event

Page 12: Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005SqlDependency

SqlConnection conn = new SqlConnection("connect string");SqlCommand cmd = new SqlCommand( "Select job_id, job_desc from dbo.jobs",conn);

SqlDependency depend = new SqlDependency(cmd);

depend.OnChanged += new OnChangedEventHandler(myHandler);

SqlDataReader results = cmd.ExecuteReader();while (results.Read()) // … Code …

static void myHandler(object caller, SqlNotificationEventArgs e){ Console.WriteLine(e.Source); Console.WriteLine(e.Type); // … Code …}

Page 13: Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005SqlNotificationRequest

• SqlNotificationRequest arbeitet direkt mit dem Service Broker– Verschickt Nachrichten an dort registrierte

Services/Queues• Nachrichten müssen “selbst” bearbeitet werden

• SqlDependency benutzt intern SqlNotificationRequest

Page 14: Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005SqlNotification Request

SqlCommand cmd = new SqlCommand( "Select ProductName, UnitPrice from dbo.Products " + "where CategoryID = @CatID", conn);cmd.Parameters.AddWithValue("@CatID",Category);

SqlNotificationRequest not = new SqlNotificationRequest();

// Verweis auf den Dienst MyService, der// einer Queue (servqueue) zugewiesen wurdenot.Service = "MyService";not.Id = "someid";

not.Timeout = 0;// Kommando und Notification verbindencmd.Notification = not;

rdr = cmd.ExecuteReader();

Page 15: Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005NotificationRequest bearbeiten

• “zu Fuß” per Broker DML– Queue der Notification muß ausgelesen werden– Kann evtl. auf einem eigenen Thread warten

public void WaitForChanges(){SqlCommand cmd = new SqlCommand( "WAITFOR (RECEIVE TOP 1 message_body from servqueue)", conn);cmd.CommandTimeout = 0;int category = (int)cmd.ExecuteScalar();}

Page 16: Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Asynchrone Ausführung

• Folgt dem IAsync-Pattern im Framework– BeginInvoke() und EndInvoke()– Delegate wird bei Ankunft des Ergebnisses aufgerufen

• Am Command Objekt können verschiedene Aktionen asynchron angestoßen werden:– Command.BeginExecuteReader – Command.BeginExecuteNonQuery– Command.BeginExecuteXmlReader

• IAsyncResult kann verwendet werden um Ergebnisse entgegenzunehmen

Page 17: Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Asynchron ExecuteReader

aufrufen

SqlConnection conn = new SqlConnection( "server=mysvr;integrated security=sspi;database=pubs");conn.ConnectionString += ";async=true";conn.Open();SqlCommand cmd = new SqlCommand("select * from authors", conn);

// execute the command asynchronouslyIAsyncResult ar = cmd.BeginExecuteReader();

// check every 250 ms for resultwhile (!ar.IsCompleted) {Console.Write(".");Thread.Sleep(250);}// harvest resultsSqlDataReader rdr = cmd.EndExecuteReader(ar);

Page 18: Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005

• Demo

Page 19: Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Zusammenfassung

• ADO.NET 2.0 bringt drei Arten von Neuerungen:– Unterstützung neuer Features in SQL Server– Neuerungen für alle Provider– Verbesserungen am Objektmodell

• Gemeinsame Providerklassen und Info-APIs machen die dynamische Arbeit mit Datenbanken noch einfacher

• Viele Änderungen passieren „unter der Haube“, z.B. Verbesserungen beim Connection Pooling

Page 20: Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005

• Fragen?