Frage

Ich muss eine DLL von Drittanbietern in einem Trigger -C# -Code in SQL Server CLR verwenden

Wenn ich jedoch versuche, Referenz hinzuzufügen, wird nur einige DLLs von SQL Server angezeigt.

Wie kann ich meine hinzufügen DLL DLL zu SQL Server?

War es hilfreich?

Lösung

Sie können nur Verweise auf die Baugruppen hinzufügen, die bei SQL Server registriert wurden. Wenn sie nicht registriert sind, werden sie im Dialogfeld "Referenzen" nicht angezeigt.

Es gibt eine Reihe von Schritten, die Sie durchführen müssen, um eine DLL zu registrieren. Zunächst müssen Sie Ihre Datenbank neu konfigurieren:

ALTER DATABASE [MyDatabase] SET TRUSTWORTHY ON;
sp_configure 'clr enabled', 1;
RECONFIGURE;

Sobald dies erledigt ist, ist SQL Server CLR aktiviert. Als nächstes müssen Sie Ihre Baugruppe registrieren:

CREATE ASSEMBLY [MyAssembly] AUTHORIZATION [MyUser]
FROM 'C:\CLR\MyAssembly.dll'
WITH PERMISSION_SET = SAFE

Wenn dieses letzte Skript korrekt ausgeführt wird, ist die Baugruppe jetzt registriert und wird im Dialogfeld "Referenzen hinzufügen" angezeigt.

Was Sie jedoch berücksichtigen müssen, ist die Anwendungssicherheit Ihrer SQL Server CLR -Konfiguration:

  1. Zulassen Sie es vor, eine Baugruppe als Versammlung zu registrieren als SAFE, nur unter außergewöhnlichen Umständen sollten Sie verwenden EXTERNAL_ACCESS oder UNSAFE.
  2. Erwarten Sie nicht, alles, was Sie können, auf CLR (dh nicht der von SQL Server gehosteten CLR) tun können - die SQLCLR ist eine Sandbox -Laufzeit.
  3. Versuchen Sie nicht, Baugruppen dynamisch wie Assembly.Load() ist absichtlich eingeschränkt.
  4. Möglicherweise müssen Sie sicherstellen, dass die Bibliothek der Drittanbieter mit einem öffentlichen Schlüssel unterzeichnet wird UNSAFE.
  5. Code -Ausführung wird im Kontext der Identität des Dienstes ausgeführt, das SQL Server ausführt (glaube ich!)
  6. Datenbankzugriff aus einer gehosteten Baugruppe (z. B. über context connection = true;) Läuft im Kontext des verbundenen Benutzers. Sie müssen daher sicherstellen, dass Sie wissen, welchen Zugriff diese Bibliothek auf Ihre Daten haben.

Andere Tipps

Ich gehe davon aus, dass Sie nach Alternativen zur Installation von SQL CLR -Baugruppen von Visual Studio fragen.

Es ist nicht erforderlich, den Code in Visual Studio zu haben.

Bereitstellung von CLR -Datenbankobjekten Auf MSDN beschreibt die Optionen, einschließlich SQL -Anweisungen und Bereitstellungsskripte.

Ich benutze eine sehr große DLL, die eine Webseite nimmt und sie in eine PDF umwandelt.

Das PDF wird auf einer Dateifreigabe gespeichert und die Datenbank wird über den Standort und den Typ aktualisiert.

Dies ist ein 3-Stufen-Prozess:

  1. Erstellen Sie eine Konsolen -App, die die DLL der Drittanbieter verwendet, um die PDF zu erstellen und die URL und Filepath als Parameter zu akzeptieren und die PDF -Größe und die Anzahl der Seiten zurückzugeben.

  2. Erstellen Sie eine CLR -gespeicherte Prozedur, die dann die Konsolen -App auf dem Server aufruft

  3. Ich wickle dies alles in eine einzelne gespeicherte Prozedur ein, die die CLR-App zum Erstellen des PDF aufruft, und schreibe dann Meta-Daten darüber in die Datenbank.

Mir ist klar, dass dies nicht perfekt ist und keineswegs, wenn Sie in einem Auslöser etwas so verrücktes tun sollten!

Ich erwähne es hier nur für andere für andere mit Fragen zur Verwendung von DLLs von Drittanbietern in ihrem CLR.

Ich hoffe, dass durch das Abspalten einer cmd.exe-Konsole die DLL der Dritte Partei ausführen kann, anstatt alles zu vergrößern, wenn sie abstürzt, sie nicht so stark beeinflusst. Das hoffe ich.

Bitte kommentieren Sie, ob dies ein wirklich-bater Ansatz ist und warum.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top