SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH
1 SQL Server 2005 Plattform
2 Agenda Was steckt hinter der Integration? Prozeduren und Funktionen Ausführungskontext Eigene Datentypen Kurz um: Wie & Warum?
3 Bin nach Hex: T-SQL vs. C# is null return null nvarchar(4000) = = 1 = '0x' begin 1) & 0xF & 0xF0 > 0 / 0xF + ((case < 10 then = 10 then 'A' = 11 then 'B' = 12 then 'C' = 13 then 'D' = 14 then 'E' = 15 then 'F' else 'Z' end) + (case < 10 then = 10 then 'A' = 11 then 'B' = 12 then 'C' = 13 then 'D' = 14 then 'E' = 15 then 'F' else 'Z' end)) end T-SQL if (value == null) return null; StringBuilder sb = new StringBuilder(); foreach (byte b in value) sb.Append(b.ToString("X2")); return sb.ToString(); C#
4 Was bietet die Integration? Serverseitige Routinen in C#, VB.NET, … Stored Procedures, Functions, Triggers, Data Types & Aggregates Erweitertes Sicherheitsmodell Einheitliche Entwicklungsumgebung Performancevorteile
5.NET oder T-SQL? Verwenden Sie.NET Routinen … … wenn es mit T-SQL nicht möglich ist … für aufwendige Rechenoperationen … um Logik zu implementieren … wenn auf wenige Daten zugegriffen wird Verwenden Sie T-SQL … … bei daten-intensiven Abfragen
6 So gehts! SQL Abfragen: SELECT GetOrderCount(region) FROM order VS.NET Projekt VB,C#,C++ Build SQL Server SQL Definitionen: create assembly … create function … create procedure … create trigger … create type … SQL Definitionen: create assembly … create function … create procedure … create trigger … create type … Assembly
7 Notwendige Erweiterungen.NET Framework 2.0 Neue Hosting APIs für CLR Integration Neue/Anpassungen ADO.NET Klassen T-SQL Neue Befehle für Assembly-Management Syntax Erweiterungen für Unterstützung von eigenen Datentypen u.w.
8 Assembly Sicherheitsmodell SAFE Standard, kein Zugriff auf externe Ressourcen und unmanaged Code EXTERNAL_ACCESS Wie Safe aber Zugriff auf externe Ressourcen UNSAFE Zugriff auf externe Ressourcen und unmanged Code erlaubt
9 Agenda Was steckt hinter der Integration? Prozeduren und Funktionen Ausführungskontext Eigene Datentypen Kurz um: Wie & Warum?
10 Prozeduren und Funktionen 4 Typen User-Defined Procedures (UDPs) Scalar-valued User-Defined-Functions (UDFs) Table-valued User-Defined-Functions (TVFs) User-Defined Triggers.NET Funktionen unterliegen den gleichen Restriktionen wie T-SQL Funktionen Keine Manipulation der Daten, deterministisch
11 Implementierung Deklarative Implementierung Statische Methoden mit Attribut vorab Anmeldung per Wrapper notwendig CREATE FUNCTION … CREATE PROCEDURE … CREATE TRIGGER … Ganz normaler Code SqlClient für Datenzugriff
12 Prozeduren und Funktionen
13 Agenda Was steckt hinter der Integration? Prozeduren und Funktionen Ausführungskontext Eigene Datentypen Kurz um: Wie & Warum?
14 Integration != Integration Hier: SQL 2000 Extended Stored Procedures Client SqlServr.exe Daten Ext. SP Select * 1. Connection Select * 2. Connection 2. Thread Abbildung aus A First Look at SQL Server 2005 for Developers, AW
15 SQL Server 2005 Beste Integration der Welt! SqlServr.exe Daten SqlCommand cmd =... cmd.ExecuteNonQuery() SqlCommand cmd =... cmd.ExecuteNonQuery() Managed Code Unmanaged Code PInvoke Abbildung aus A First Look at SQL Server 2005 for Developers, AW Client 1. Connection
16 Der Unterschied Zugriff auf Ausführungkontext ermöglicht Aufspringen auf die vorhandene Connection Zugriff auf Client Ausgabestrom Information, ob Ausführung unter SQL Server 2005 erfolgt
17 Zugriffsklassen SqlContext – Einstiegsklasse; Zugriff auf SqlPipe und SqlTriggerContext. IsAvailable gibt Auskunft ob Ausführung unter dem Sql Server 2005 erfolgt SqlPipe – Zugang zum Client Ausgabestrom SqlTriggerContext – Zugriff auf Trigger-spezifische Kontextinformationen
18 Umgang mit SqlContext
19 Einschränkungen Context Connections MARS (Multiple Active Result Sets) nicht unterstützt Nur eine offene Context Connection möglich SqlBulkCopy nicht unterstützt Update batching nicht unterstützt SqlNotificationRequest nicht unterstützt Auch normale Connections unterliegen Einschränkungen (kein asynchronous commands, keine SqlDependency …)
20 Agenda Was steckt hinter der Integration? Prozeduren und Funktionen Ausführungskontext Eigene Datentypen Kurz um: Wie & Warum?
21 Wann UDTs? Implementierung eigener User-Defined Types (UDTs) in VB.NET, C# etc. möglich Gedacht für die Implementierung skalarer Datentypen, nicht Geschäfts- objekte Geschäftsobjekte per O/R Mapper, XML- Serialisierung etc. speichern
22 Implementierung Referenz-Typ Implementierung als Class Zeiger auf Speicherbereich, wo Daten liegen Wert-Typ Implementierung als Struct (C#) / Structure (VB.NET) Speicherung erfolgt als Bit-Sequenz Beide sind auf 8 kB limitiert Unterschiede liegen im internen Speichermanagement Weitere Informationen unter MSDN
23 Eigene Datentypen
24 Agenda Was steckt hinter der Integration? Prozeduren und Funktionen Ausführungskontext Eigene Datentypen Kurz um: Wie & Warum?
25 Wie & Warum? Wie? Entwicklung in C#, VB.NET,... Attribute & Templates Warum? Implementierung von Geschäftslogik Einfacher & mächtiger Schneller bei Rechenoperationen
26 Fragen und Antworten Vielen Dank! Sebastian Weber
27 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.