Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005."—  Präsentation transkript:

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

2 Microsoft Academic Program Student Technology Conference 2005 Datenzugriff mit Framework 2.0 Dirk Primbs Developer Evangelist Microsoft Deutschland GmbH

3 Microsoft Academic Program Student Technology Conference 2005 Agenda ADO.NET Revisited Neue Objekte für alle Provider Neu für den Zugriff auf SQL Server

4 Microsoft Academic Program Student Technology Conference 2005 ADO.NET revisited Managed Provider DataReader Command Connection Sync Controls, Designers, Code-gen, etc DataSet XmlReader XmlText- Reader XmlNode- Reader XSL/T, X-Path, etc XmlData- Document DataAdapter

5 Microsoft Academic Program Student Technology Conference 2005 Neu in System.Data DataSet auch binär serialisierbar DataTable serialisierbar ProviderBase – Basisobjekte für eigene Provider Providerstatistik ConnectionStringBuilder Providerfactories Schema API …

6 Microsoft Academic Program Student Technology Conference 2005 Speziell für SQL Server, z.B. MARS Query Notifications Bulk Copy / Bulk Import User Defined SQL Types Paßwort Ändern per API

7 Microsoft Academic Program Student Technology Conference 2005 Outline SNAC Multiple Active Resultsets (MARS) Dependencies and Notifications on the client Snapshot isolation support Asynchronous Support SqlClient Statistics Bulk Copy

8 Microsoft Academic Program Student Technology Conference 2005 Client-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

9 Microsoft Academic Program Student Technology Conference 2005 SQL 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

10 Microsoft Academic Program Student Technology Conference 2005 MARS 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

11 Microsoft Academic Program Student Technology Conference 2005 Das 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 an rdr.Read(); rdr2.Read(); Console.WriteLine(rdr2[0]);

12 Microsoft Academic Program Student Technology Conference 2005 Die Lösung mit MARS // MARS ist in SQL Server 2005 per default verfügbar SqlConnection 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 Kommando SqlCommand cmd2 = new SqlCommand("select * from jobs",conn); conn.Open(); SqlDataReader rdr = cmd.ExecuteReader(); // Jetzt klappts auch mit dem zweiten Reader SqlDataReader rdr2 = cmd2.ExecuteReader(); rdr2.Read(); rdr.Read(); Console.WriteLine(rdr[0]); Console.WriteLine(rdr2[0]);

13 Microsoft Academic Program Student Technology Conference 2005 Dependencies 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

14 Microsoft Academic Program Student Technology Conference 2005 SqlDependency 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

15 Microsoft Academic Program Student Technology Conference 2005 SqlDependency 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 … }

16 Microsoft Academic Program Student Technology Conference 2005 SqlNotificationRequest SqlNotificationRequest arbeitet direkt mit dem Service Broker –Verschickt Nachrichten an dort registrierte Services/Queues Nachrichten müssen selbst bearbeitet werden SqlDependency benutzt intern SqlNotificationRequest

17 Microsoft Academic Program Student Technology Conference 2005 SqlNotification 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 wurde not.Service = "MyService"; not.Id = "someid"; not.Timeout = 0; // Kommando und Notification verbinden cmd.Notification = not; rdr = cmd.ExecuteReader();

18 Microsoft Academic Program Student Technology Conference 2005 NotificationRequest 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(); }

19 Microsoft Academic Program Student Technology Conference 2005 Snapshot Isolation SqlConnection conn = new SqlConnection( "connect string"); SqlTransaction tx = null SqlCommand cmd = new SqlCommand( "update jobs set job_desc = 'New job" where job_id = 1", conn, tx); try { conn.Open(); tx = conn.BeginTransaction(IsolationLevel.Snapshot); //... }

20 Microsoft Academic Program Student Technology Conference 2005 Asynchrone 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

21 Microsoft Academic Program Student Technology Conference 2005 Asynchron 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 asynchronously IAsyncResult ar = cmd.BeginExecuteReader(); // check every 250 ms for result while (!ar.IsCompleted) { Console.Write("."); Thread.Sleep(250); } // harvest results SqlDataReader rdr = cmd.EndExecuteReader(ar);

22 Microsoft Academic Program Student Technology Conference 2005 Demo

23 Microsoft Academic Program Student Technology Conference 2005 SqlClient Statistics SQL Client kann Statistiken zur Nutzung des Providers liefern Werden in Form einer Hashtable zurückgegeben

24 Microsoft Academic Program Student Technology Conference 2005 SqlClient Statistics SqlConnection conn = new SqlConnection( "server=.;integrated security=sspi;database=pubs"); conn.Open(); conn.StatisticsEnabled = true; SqlCommand cmd = new SqlCommand( "select * from authors", conn); SqlDataReader rdr = cmd.ExecuteReader(); Hashtable stats = (Hashtable)conn.RetrieveStatistics(); IDictionaryEnumerator e = stats.GetEnumerator(); while (e.MoveNext()) Console.WriteLine("{0} : {1}", e.Key, e.Value); conn.ResetStatistics();

25 Microsoft Academic Program Student Technology Conference 2005 Bulk Insert Hilfsklasse zur Verwendung von Bulk Copy Bulk Copy kann große Datenmengen effiezient zum SQL Server übertragen –Kann Daten von DataTable oder IDataReader verwenden –Verwendet das BULK INSERT Kommando // bulk copy mit einem DataReader void DoBulkCopy(IDataReader reader) { SqlBulkCopy bcp = new SqlBulkCopy(connectString); bcp.DestinationTableName = "Customers"; bcp.WriteToServer(reader); }

26 Microsoft Academic Program Student Technology Conference 2005 Provider Factories Dynamisches Enumerieren durch alle installierten Datenbankprovider –Sind in Machine.Config oder in App.Config eingetragen Dynamische Instanziierung von Factory- Objekten –Alle Haupt-Providerobjekte können dynamisch erzeugt werden

27 Microsoft Academic Program Student Technology Conference 2005 Schema API Datenbankstruktur ist über Connection.GetSchema() ermittelbar Sehr generische Schnittstelle Nur optional im Provider zu finden, derzeit von SQL Provider und verschiedenen OLEDB Providern unterstützt

28 Microsoft Academic Program Student Technology Conference 2005 Zusammenfassung 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

29 Microsoft Academic Program Student Technology Conference 2005 Fragen?


Herunterladen ppt "Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005."

Ähnliche Präsentationen


Google-Anzeigen