Top Banner
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.

Apr 05, 2015

Download

Documents

Uschi Schiebel
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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?