View
107
Download
0
Category
Preview:
Citation preview
SQL Server 2005 CLR Integration
Sebastian WeberMicrosoft Deutschland GmbH
Sebastian.Weber@microsoft.comhttp://blogs.msdn.com/sebweber
2
SQL Server 2005 Plattform
3
Agenda
• Was steckt hinter der Integration?
• Prozeduren und Funktionen
• Ausführungskontext
• Eigene Datentypen
• Kurz um: Wie & Warum?
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#
5
Was bietet die Integration?
• Serverseitige Routinen in C#, VB.NET, …
• Stored Procedures, Functions, Triggers, Data
Types & Aggregates
• Erweitertes Sicherheitsmodell
• Einheitliche Entwicklungsumgebung
• Performancevorteile
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
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
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.
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
10
Agenda
• Was steckt hinter der Integration?
• Prozeduren und Funktionen
• Ausführungskontext
• Eigene Datentypen
• Kurz um: Wie & Warum?
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
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
13
Prozeduren und Funktionen
14
Agenda
• Was steckt hinter der Integration?
• Prozeduren und Funktionen
• Ausführungskontext
• Eigene Datentypen
• Kurz um: Wie & Warum?
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
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
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
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
19
Umgang mit SqlContext
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 …)
21
Agenda
• Was steckt hinter der Integration?
• Prozeduren und Funktionen
• Ausführungskontext
• Eigene Datentypen
• Kurz um: Wie & Warum?
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
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
24
Eigene Datentypen
25
Agenda
• Was steckt hinter der Integration?
• Prozeduren und Funktionen
• Ausführungskontext
• Eigene Datentypen
• Kurz um: Wie & Warum?
26
Wie & Warum?
• Wie?• Entwicklung in C#, VB.NET, ...• Attribute & Templates
• Warum?• Implementierung von Geschäftslogik• Einfacher & mächtiger• Schneller bei Rechenoperationen
27
Fragen und Antworten
Vielen Dank!Sebastian Weber
Sebastian.Weber@microsoft.com
http://blogs.msdn.com/sebweber
28© 2005 Microsoft Corporation. All rights reserved.
This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
Recommended