none
Funktion mittels dll auf SQL Server 2008 RRS feed

  • 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


    Donnerstag, 12. Januar 2012 15:44

Antworten

  • Am 17.01.2012 14:58, schrieb LostGottfried:
    > Hat denn niemand einen Rat für mich? Verzweifle noch...
     
    Kenn mich nicht ganz so aus ...
     
    Aber geht es denn die Funtionen und Prozeduren aus deiner DLL in den
    Quell-Code einer SQL CLR Dll zu kopieren?
     
    • Als Antwort markiert LostGottfried Donnerstag, 19. Januar 2012 13:22
    Mittwoch, 18. Januar 2012 08:03

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
    Donnerstag, 12. Januar 2012 17:15
    Moderator
  • 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

    Freitag, 13. Januar 2012 11:02
  • Hat denn niemand einen Rat für mich? Verzweifle noch...
    Dienstag, 17. Januar 2012 13:58
  • Am 17.01.2012 14:58, schrieb LostGottfried:
    > Hat denn niemand einen Rat für mich? Verzweifle noch...
     
    Kenn mich nicht ganz so aus ...
     
    Aber geht es denn die Funtionen und Prozeduren aus deiner DLL in den
    Quell-Code einer SQL CLR Dll zu kopieren?
     
    • Als Antwort markiert LostGottfried Donnerstag, 19. Januar 2012 13:22
    Mittwoch, 18. Januar 2012 08:03
  • 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

    Mittwoch, 18. Januar 2012 09:23
  • Vielen Dank Elmar!

    Ja, werds via Windows Dienst machen.

     

    Donnerstag, 19. Januar 2012 13:22