SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH...

28
SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH [email protected] http://blogs.msdn.com/sebweber

Transcript of SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH...

Page 1: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

SQL Server 2005 CLR Integration

Sebastian WeberMicrosoft Deutschland GmbH

[email protected]://blogs.msdn.com/sebweber

Page 2: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

2

SQL Server 2005 Plattform

Page 3: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

3

Agenda

• Was steckt hinter der Integration?

• Prozeduren und Funktionen

• Ausführungskontext

• Eigene Datentypen

• Kurz um: Wie & Warum?

Page 4: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

4

Bin nach Hex: T-SQL vs. C#if @bin is null return null

declare @len int, @b tinyint, @lowbyte tinyint, @hibyte tinyint, @index int, @str nchar(2), @result nvarchar(4000)

set @len = datalength(@bin)

set @index = 1

set @result = '0x'

while @index <= @len

begin

set @b = substring(@bin, @index, 1)

set @index = @index + 1

set @lowbyte = @b & 0xF

set @hibyte = @b & 0xF0

if @hibyte > 0

set @hibyte = @hibyte / 0xF

set @result = @result +

((case

when @hibyte < 10 then convert(varchar(1), @hibyte)

when @hibyte = 10 then 'A'

when @hibyte = 11 then 'B'

when @hibyte = 12 then 'C'

when @hibyte = 13 then 'D'

when @hibyte = 14 then 'E'

when @hibyte = 15 then 'F'

else 'Z'

end)

+

(case

when @lowbyte < 10 then convert(varchar(1), @lowbyte)

when @lowbyte = 10 then 'A'

when @lowbyte = 11 then 'B'

when @lowbyte = 12 then 'C'

when @lowbyte = 13 then 'D'

when @lowbyte = 14 then 'E'

when @lowbyte = 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#

Page 5: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

5

Was bietet die Integration?

• Serverseitige Routinen in C#, VB.NET, …

• Stored Procedures, Functions, Triggers, Data

Types & Aggregates

• Erweitertes Sicherheitsmodell

• Einheitliche Entwicklungsumgebung

• Performancevorteile

Page 6: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

6

.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

Page 7: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

7

So geht‘s!

SQL Abfragen: SELECT GetOrderCount(region) FROM order

SQL Abfragen: SELECT GetOrderCount(region) FROM order

VS .NET

Projekt

VS .NET

Projekt

VB,C#,C++ Build

SQL Serve

r

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

Page 8: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

8

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.

Page 9: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

9

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

Page 10: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

10

Agenda

• Was steckt hinter der Integration?

• Prozeduren und Funktionen

• Ausführungskontext

• Eigene Datentypen

• Kurz um: Wie & Warum?

Page 11: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

11

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

Page 12: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

12

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

Page 13: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

13

Prozeduren und Funktionen

Page 14: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

14

Agenda

• Was steckt hinter der Integration?

• Prozeduren und Funktionen

• Ausführungskontext

• Eigene Datentypen

• Kurz um: Wie & Warum?

Page 15: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

15

Integration != IntegrationHier: SQL 2000 Extended Stored Procedures

ClientClient

SqlServr.exeSqlServr.exe

Daten

Daten

Ext. SPSelect *Ext. SPSelect *

1. Connection

Select *Select *

2. Connection

2. Thread

Abbildung aus A First Look at SQL Server 2005 for Developers, AW

Page 16: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

16

SQL Server 2005Beste Integration der Welt!

SqlServr.exeSqlServr.exe

Daten

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

ClientClient1. Connection

Page 17: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

17

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

Page 18: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

18

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

Page 19: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

19

Umgang mit SqlContext

Page 20: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

20

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

Page 21: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

21

Agenda

• Was steckt hinter der Integration?

• Prozeduren und Funktionen

• Ausführungskontext

• Eigene Datentypen

• Kurz um: Wie & Warum?

Page 22: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

22

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

Page 23: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

23

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

Page 24: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

24

Eigene Datentypen

Page 25: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

25

Agenda

• Was steckt hinter der Integration?

• Prozeduren und Funktionen

• Ausführungskontext

• Eigene Datentypen

• Kurz um: Wie & Warum?

Page 26: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

26

Wie & Warum?

• Wie?• Entwicklung in C#, VB.NET, ...• Attribute & Templates

• Warum?• Implementierung von Geschäftslogik• Einfacher & mächtiger• Schneller bei Rechenoperationen

Page 27: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

27

Fragen und Antworten

Vielen Dank!Sebastian Weber

[email protected]

http://blogs.msdn.com/sebweber

Page 28: SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH Sebastian.Weber@microsoft.com .

28© 2005 Microsoft Corporation. All rights reserved.

This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.