Benutzer mit den meisten Antworten
Funktion mittels dll auf SQL Server 2008

Frage
-
Hallo zusammen!
Ich müsste komplexe Berechnungen (hautsächlich statistische Kennzahlen) auf DB-Ebene berechnen und bin mittels online-Recherche auf SQL CLR Funktionen gestoßen.
Die Kennzahlenberechnungen habe ich mittels MATLAB realisiert und mir als .NET Code (.cs Dateien) exportiert bzw. habe ich mir auch DLLs davon machen lassen.
Nun hätt ich folgende Machbarkeitsfragen:
1. (EASY Variante) Gibt es nen Weg, wie ich ev. gleich direkt mittels MATLAB-erzeugte DLLs in den MS SQL Server gehen kann und so meine Berechnungen via SQL machen kann?? (befürchte nicht)
2. Ist es möglich den MATLAB-exportierten C# Code ins Visual Studio in ein Visual C# SQL CLR Datenbankprojekt zu holen und dann "benutzerdefinierte Funktionen" daraus zu machen? Mein Problem ist dabei aber, dass ich keine MathLab-Funktionslibraries ins Projekt holen kann.
Zusammenfassend: Bin verzweifelt auf der Suche nach einer Lösung, wie ich komplizierte Berechnungen in MS SQL Serverseitig machen! :(
Oder bleibt nur der Weg, dass ich mir die Datensätze über Querries von der DB ins C# hole, berechne und dann die Lösung in die jeweilige Zelle der DB zurückschicke? Oder andere Vorschläge?
Vielen Dank falls sich ein Pro findet, der mir weiterhelfen kann!
MfG,
Gottfried
- Bearbeitet LostGottfried Donnerstag, 12. Januar 2012 15:47
Antworten
-
- Als Antwort markiert LostGottfried Donnerstag, 19. Januar 2012 13:22
Alle Antworten
-
Hallo Gottfried,
CLR-Integration in SQL Server ist eigentlich recht einfach. Einen Einstieg findest Du hier:
http://msdn.microsoft.com/de-de/library/ms254498.aspx
Wenn Du deine Assembly "UNSAFE" integrierst, könnte es ggfs. auch mit den MatLab DLLs (auf .NET Basis oder per P/Invoke) klappen.
http://msdn.microsoft.com/de-de/library/ms345101.aspx
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo! Danke erstmal an Stefan für seine Antwort!
Versuche aber immernoch vergeblich meine in MATLAB-erzeugten Funktionen in meinen SQL Server zu bekommen. Habe 3 Varianten probiert:
1. Variante:
Mittels "Visual C# SQL CLR Datenbankprojekt" meine in MATLABerzeugte dll zu imporiteren. Habe auch in Projekteinstellungen UNSAFE und EXTERNAL_ACCESS probiert. Ich bekke sie einfach nicht ins "Verweise"-Verzeichnis und somit kann ich die Funktionen auch nicht verwenden.
2. Variante:
Hab mir die MATLAB-Funktionen als C# Files exportiert und reingezogen. Nur habe ich dann das Problem, dass ich MATLABspezifische Typen wie MWArray habe. Müsste daher wieder verschiedene MATLAB DLLs hinzufügen, was wie in Variante 1 beschrieben ja nicht funktioniert.
3. Variante:
Hab auf meinem SQL Server 2008 Express versucht die DLLs von MATLAB Typen oder meine selbsterzeugte MATLAB-Dll zu importieren, was jedoch mit folgender Fehlermeldung endete:
Input:
CREATE ASSEMBLY MyDLL FROM 'C:\Test\MyMathLabDll.dll' WITH PERMISSION_SET = UNSAFE
Output:
Msg 6257, Level 16, State 1, Line 1
CREATE ASSEMBLY for assembly 'Functions' failed because the assembly is built for an unsupported version of the Common Language Runtime.Daher meine Frage:
Ist es überhaupt möglich mein Vorhaben über CLR-Integration bzw Assemblies zu machen?
Vielen Dank falls sich ein Pro findet, der mir weiterhelfen kann!
MfG,
Gottfried
-
- Als Antwort markiert LostGottfried Donnerstag, 19. Januar 2012 13:22
-
Hallo Gottfried,
da mir die MatLab Assemblies nicht vorliegen, kann ich nur anhand der Dokumentation phantasieren.
Aber sehr wahrscheinlich ist ein großer Teil nur ein Wrapper um unmanaged Code.
Und den ungeprüft in einem SQL Server zu verwenden, stellt für sich ein Risiko dar,
da er die Integrität des SQL Servers (Speicher etc.) gefährden kann.
Und ich glaube kaum, dass die MathLab Entwickler dies als Szenario vorgesehen
geschweige denn getestet haben.Und wenn die .NET Versionen nicht passen, wird es daran schon scheitern.
Eine stabilere Lösung wäre, den Code in eine eigenständige Anwendung auszulagern.
Dies könnte ein Windows Dienst sein, der über eine Shared Memory Verbindung mit dem SQL Server kommuniziert.
Womit man zwar evtl. mehr Overhead hätte, aber dafür auch frei die Umgebung definieren kann,
unter der die Funktionen ausgeführt werden.Gruß Elmar