SQL Server 2005 CLR-Integration Jörg Neumann RESCO GmbH Hamburg.
Transcript of SQL Server 2005 CLR-Integration Jörg Neumann RESCO GmbH Hamburg.
SQL Server 2005CLR-Integration
Jörg Neumann
RESCO GmbH
Hamburg
Jörg NeumannIT-Consultant bei der RESCO GmbH in Hamburg.Hält Schulungen und Coachings zum SQL Server 2005Schreibt für verschiedene FachzeitschriftenSchreibt an einem Buch über den SQL Server 2005Hält Vorträge auf EntwicklerkonferenzenSchwerpunkte:
SQL ServerSmart ClientsVisual Studio Extensibility
Links zu weiterführenden Artikeln und Büchern finden Sie am Ende der Slides.Kontakt: [email protected]
Agenda
Warum CLR-Integration?
Details zur Integration
CLR-Datenbankobjekte erstellen
Serverseitiger Zugriff mit ADO.NET
Agenda
Warum CLR-Integration?Warum CLR-Integration?
Details zur Integration
CLR-Datenbankobjekte erstellen
Serverseitiger Zugriff mit ADO.NET
Warum CLR-Integration?T-SQL
Für mengenorientierten Zugriff ausgelegt
Eingeschränkte Funktionalität
Eingeschränkte Erweiterbarkeit
Eingeschränktes Programmiermodell
Maximale Performance
Warum CLR-Integration?Extended Stored Procedures
C++, Speichermanagement, Sicherheit
Schwer zu debuggen
Loop-Back-Connection zur DB
Externe DLL
RückgabeStored
Procedure Extended
Stored Procedure
Aufruf
Daten ermitteln
Warum CLR-Integration?SQLCLR
Sprach- und Funktionsvielfalt von .NET
Speichermanagement
Sicherheit
Inprocess-Datenzugriff
Mit T-SQL kombinierbar
Programmierbare ObjekteObjekte T-SQL CLR XP COM
Prozeduren
Funktionen
Trigger
Datentypen
Aggregate
T-SQL vs. SQLCLRT-SQL
Bei mengenorientierten OperationenHigh-Performance-Zugriffe
SQLCLRBei zeilenorientierten OperationenKomplexen Berechnungen
Regular ExpressionsVerschlüsselungStringmanipulation
Externe Zugriffe
Wofür SQLCLR nicht istErsatz für T-SQL
Serverseitige Datenzugriffsschicht
O/R-Mapping mit UDTs
Word/Excel/PDF-Generierung
Image Processing
Agenda
Warum CLR-Integration?
Details zur IntegrationDetails zur Integration
CLR-Datenbankobjekte erstellen
Serverseitiger Zugriff mit ADO.NET
SQL Server vs. CLR• Speichermanagement
• Thread-Management
• Typsystem
• Sicherheit
• Verfügbarkeit
• CLR-Integration muss explizit aktiviert werden
CLR-Erweiterungen in .NET 2.0Runtime Hosting API
Assembly Loading
AppDomain Management
Thread-Management/Synchronisation
Deadlock-Erkennung
Security Management
Speicherverwaltung
CLR-Integration
SQL Engine
Betriebssystem
Systemfunktionalität
Hosting Layer
CLR
Extener Aufruf
SQL Server
Hosting Layer
CLR
.NET Assembly
Funktion
Interner Aufruf
SicherheitsprüfungenPrüfung bei der Installation
Prüfung vor der Ausführung
Unterstützte Framework-Assemblies:mscorlib.dll
system.data.dll
system.dll
system.xml.dll
system.security.dll
system.web.services.dll
Agenda
Warum CLR-Integration?
Details zur Integration
CLR-Datenbankobjekte erstellenCLR-Datenbankobjekte erstellen
Serverseitiger Zugriff mit ADO.NET
CLR-Datenbankobjekte erstellenCLR-Methoden werden mit Attributen gekennzeichnet
SqlProcedure
SqlFunction
SqlUserDefinedAggregate
SqlUserDefinedType
SqlTrigger
Enthalten zum Teil auch Laufzeitinformationen
Für jede CLR-Methode wird ein Datenbankobjekt erstellt
Funktionen und Assemblies
DatenbankMyAssembly
[SqlProcedure]
public static void MyProc()
{
// Implementierung...
}
[SqlFunction]
public static int MyFunc()
{
// Implementierung...
}
CREATE FUNCTION MyFunc() RETURNS int
AS EXTERNAL NAMEMyAssembly.[MyNamespace.MyClass].MyFunc
CREATE PROCEDURE MyProc()
AS EXTERNAL NAMEMyAssembly.[MyNamespace.MyClass].MyProc
CREATE ASSEMBLY MyAssembly
FROM 'C:\MyAssembly.dll'
WITH PERMISSION_SET = SAFE
DemoDemo
CLR-Prozedur erstellenCLR-Prozedur erstellen
Agenda
Warum CLR-Integration?
Details zur Integration
CLR-Datenbankobjekte erstellen
Serverseitiger Zugriff mit ADO.NETServerseitiger Zugriff mit ADO.NET
Serverseitiges ADO.NETNamespace Microsoft.SqlServer.ServerProgrammiermodell wie auf dem Client
SqlConnectionSqlDataAdapterSqlCommand
Zusätzliche ServerklassenSqlContextSqlPipeTriggerContextDataRecord
Zugriff auf die aktive Session
Zugriff auf den Ausgabestrom
Zugriff auf Trigger-Daten
Definition einer Datenzeile
Datenbankverbindung herstellenSqlConnection
SqlConnection connection = new SqlConnection("Context Connection = trueContext Connection = true");
SqlPipeDaten an den Aufrufer senden
Send(), ExecuteAndSend()
SendResultsStart(), …Row(), …End()
SQL Server
Ausgabe
SqlPipe
Prozedur A
Prozedur B
Prozedur C
DemoDemo
DatenzugriffDatenzugriff
????Fragen?Fragen?
RessourcenBücher
A First Look at SQL Server 2005 for Developers Bob Beauchemin u.a., Addison-Wesley, ISBN: 0321180593
ArtikelUsing CLR Integration in SQL Server 2005http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql90/html/sqlclrguidance.asp
LinksSQL Server 2005 Developer Centerhttp://www.msdn.microsoft.com/SQL/2005/
Virtual Lab: SQL Server 2005 SQL CLR Integrationhttp://msdn.microsoft.com/virtuallabs/sql/default.aspx/