SQL Server 2005 CLR-Integration Jörg Neumann RESCO GmbH Hamburg

Preview:

Citation preview

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: Joerg.Neumann@RESCO.de

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/

Recommended