Ich muss eine Drittanbieter-DLL in einem Trigger-C # -Code in SQL Server CLR verwenden
Wenn ich jedoch versuche, einen Verweis hinzuzufügen, werden nur einige DLLs von SQL Server angezeigt.
Wie kann ich meine Drittanbieter-DLL zu SQL Server hinzufügen ?
sql-server
c#
sql-clr
Solomon Rutzky
quelle
quelle
Antworten:
Sie können nur Verweise auf die Assemblys hinzufügen, die bei SQL Server registriert wurden. Wenn sie nicht registriert sind, werden sie im Dialogfeld "Verweise hinzufügen" nicht angezeigt.
Es gibt eine Reihe von Schritten, die Sie zum Registrieren einer DLL ausführen müssen. Zunächst müssen Sie Ihre Datenbank neu konfigurieren:
Sobald dies erledigt ist, ist SQL Server CLR-fähig. Als Nächstes müssen Sie Ihre Assembly registrieren:
Wenn dieses letzte Skript ordnungsgemäß ausgeführt wird, ist die Assembly jetzt registriert und wird im Dialogfeld Verweise hinzufügen angezeigt.
Was Sie jedoch beachten müssen, ist die Anwendungssicherheit Ihrer SQL Server CLR-Konfiguration:
SAFE
SieEXTERNAL_ACCESS
oder nur in Ausnahmefällen verwenden solltenUNSAFE
.Assembly.Load()
absichtlich eingeschränkt ist.UNSAFE
.context connection = true;
) wird im Kontext des verbundenen Benutzers ausgeführt. Sie müssen also sicherstellen, dass Sie wissen, über welchen Zugriff diese Bibliothek auf Ihre Daten verfügt.quelle
Ich gehe davon aus, dass Sie nach Alternativen zur Installation von SQL CLR-Assemblys in Visual Studio fragen.
Der Code in Visual Studio ist nicht erforderlich.
Durch das Bereitstellen von CLR-Datenbankobjekten auf MSDN werden die Optionen, einschließlich SQL-Anweisungen und Bereitstellungsskripten, detailliert beschrieben.
quelle
Ich verwende eine sehr große DLL von Drittanbietern, die eine Webseite aufnimmt und in eine PDF-Datei konvertiert.
Die PDF-Datei wird auf einer Dateifreigabe gespeichert und die Datenbank wird in Bezug auf Speicherort und Typ aktualisiert.
Dies ist ein dreistufiger Prozess:
Erstellen Sie eine Konsolenanwendung, die die Drittanbieter-DLL zum Erstellen der PDF-Datei verwendet, die URL und FilePath als Parameter akzeptiert und die PDF-Größe sowie die Anzahl der Seiten zurückgibt.
Erstellen Sie eine gespeicherte CLR-Prozedur, die dann die Konsolenanwendung auf dem Server aufruft
Ich packe das alles in eine einzige gespeicherte Prozedur, die die CLR-App aufruft, um die PDF-Datei zu erstellen, und schreibe dann Metadaten darüber in die Datenbank.
Mir ist klar, dass dies nicht perfekt ist, und Sie sollten keinesfalls etwas so Verrücktes in einem Abzug tun!
Ich erwähne es hier nur für andere, die Fragen zur Verwendung von DLLs von Drittanbietern in ihrer CLR haben.
Ich hoffe, dass SQL Server nicht so stark beeinträchtigt wird, wenn eine cmd.exe-Konsole zum Ausführen der DLL von Drittanbietern heruntergefahren wird, anstatt alles in-proc auszuführen, wenn es abstürzt. Das hoffe ich.
Bitte kommentieren Sie, ob dies ein wirklich schlechter Ansatz ist und warum.
quelle