Muszę użyć biblioteki DLL innej firmy w kodzie wyzwalacza c # w programie SQL Server CLR
Ale kiedy próbuję dodać odwołanie, pokazuje tylko niektóre biblioteki DLL z SQL Server.
Jak mogę dodać swoją bibliotekę DLL innej firmy do SQL Server?
Muszę użyć biblioteki DLL innej firmy w kodzie wyzwalacza c # w programie SQL Server CLR
Ale kiedy próbuję dodać odwołanie, pokazuje tylko niektóre biblioteki DLL z SQL Server.
Jak mogę dodać swoją bibliotekę DLL innej firmy do SQL Server?
Odpowiedzi:
Możesz dodawać odniesienia tylko do tych zestawów, które zostały zarejestrowane na serwerze Sql Server. Jeśli nie są zarejestrowane, nie pojawią się w oknie dialogowym Dodaj odniesienia.
Aby zarejestrować bibliotekę DLL, musisz wykonać kilka czynności, po pierwsze musisz ponownie skonfigurować bazę danych:
ALTER DATABASE [MyDatabase] SET TRUSTWORTHY ON;
sp_configure 'clr enabled', 1;
RECONFIGURE;
Po wykonaniu tej czynności serwer Sql jest włączony CLR. Następnie musisz zarejestrować swój zespół:
CREATE ASSEMBLY [MyAssembly] AUTHORIZATION [MyUser]
FROM 'C:\CLR\MyAssembly.dll'
WITH PERMISSION_SET = SAFE
Jeśli ten ostatni skrypt działa poprawnie, zespół jest teraz zarejestrowany i pojawi się w oknie dialogowym Dodaj odniesienia.
Należy jednak wziąć pod uwagę bezpieczeństwo aplikacji w konfiguracji CLR serwera Sql Server:
SAFE
, tylko w wyjątkowych okolicznościach powinieneś użyć EXTERNAL_ACCESS
lub UNSAFE
.Assembly.Load()
jest to celowo ograniczone.UNSAFE
.context connection = true;
) działa w kontekście podłączonego użytkownika, więc musisz upewnić się, że wiesz, jaki dostęp ma ta biblioteka do twoich danych.Zakładam, że pytasz o alternatywne sposoby instalowania zestawów SQL CLR z Visual Studio.
Posiadanie kodu w Visual Studio nie jest wymagane.
Wdrażanie obiektów bazy danych CLR na MSDN szczegółowo opisuje opcje, w tym instrukcje SQL i skrypty wdrażania.
Używam bardzo dużej biblioteki DLL innej firmy, która pobiera stronę internetową i konwertuje ją do formatu PDF.
Plik PDF jest zapisywany w udziale plików, a baza danych jest aktualizowana pod względem lokalizacji i typu.
To jest 3-etapowy proces:
Utwórz aplikację konsoli, która korzysta z zewnętrznego pliku DLL do utworzenia pliku PDF i zaakceptuj adres URL i ścieżkę pliku jako parametry oraz zwróci rozmiar pliku PDF i liczbę stron.
Utwórz procedurę składowaną CLR, która następnie wywołuje aplikację konsoli na serwerze
Zawijam to wszystko w jedną procedurę składowaną, która wywołuje aplikację CLR w celu utworzenia pliku PDF, a następnie zapisuję o niej metadane w bazie danych.
Zdaję sobie sprawę, że to nie jest idealne i w żadnym wypadku nie powinieneś robić niczego tak szalonego w środku spustu!
Wspominam o tym tutaj tylko w przypadku innych osób, które mają pytania dotyczące używania bibliotek DLL innych firm w swoich CLR.
Mam nadzieję, że po wyłączeniu konsoli cmd.exe w celu uruchomienia biblioteki DLL innej firmy, zamiast uruchamiać wszystko w procedurze, jeśli ulegnie awarii, nie wpłynie to negatywnie na SQL Server. Mam taką nadzieję.
Proszę o komentarz, jeśli jest to naprawdę złe podejście i dlaczego.