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 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 … }

17 Microsoft Academic Program Student Technology Conference 2005 SqlNotification Request SqlCommand cmd = new SqlCommand( "Select ProductName, UnitPrice from dbo.Products " + "where CategoryID conn); 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); //... }

Ähnliche Präsentationen


Google-Anzeigen