Wie Sie bemerkt haben, System.Web
handelt es sich um eine nicht unterstützte Bibliothek. Um zu referenzieren, müssen System.Web
Sie einen Anruf tätigen CREATE ASSEMBLY
. Es scheint, als hätten Sie das versucht, aber wie haben Sie auf den Standort von verwiesen System.Web.dll
? Haben Sie es an einen anderen Ort kopiert / eingefügt? SQL Server versucht, abhängige Assemblys am selben Speicherort zu finden. Mit anderen Worten, wenn Sie auf den Speicherort System.Web.dll
aller anderen abhängigen Bibliotheken verweisen, die sich im selben Verzeichnis befinden, sollte dies einwandfrei funktionieren. Hier ist ein Arbeitsbeispiel. Ich konnte sowohl die System.Web
Baugruppe als auch Ihre Baugruppe hinzufügen :
create assembly [System.Web]
from 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Web.dll'
with permission_set = unsafe;
go
create assembly SystemWebTest
from 'c:\SqlServer\SystemWebTest.dll'
with permission_set = safe;
go
In den Clientnachrichten können Sie alle anderen Assemblys sehen, die SQL Server lädt. Beachten Sie jedoch, dass SQL Server für jede dieser Funktionen die folgende Warnung anzeigt:
Die Registrierung wird in der von SQL Server gehosteten Umgebung nicht vollständig getestet und nicht unterstützt. Wenn Sie diese Assembly oder das .NET Framework in Zukunft aktualisieren oder warten, funktioniert Ihre CLR-Integrationsroutine möglicherweise nicht mehr. Weitere Informationen finden Sie in den SQL Server-Onlinedokumenten.
System.Web
Schauen Sie sich die folgenden hinzugefügten Assemblys an , aber fügen Sie sie hinzu:
select
name,
permission_set_desc,
is_visible
from sys.assemblies
where is_user_defined = 1
order by is_visible desc;
name permission_set_desc is_visible
System.Web UNSAFE_ACCESS 1
SystemWebTest SAFE_ACCESS 1
Microsoft.Build.Framework UNSAFE_ACCESS 0
System.Xaml UNSAFE_ACCESS 0
System.ComponentModel.DataAnnotations UNSAFE_ACCESS 0
System.Runtime.Caching UNSAFE_ACCESS 0
System.Web.ApplicationServices UNSAFE_ACCESS 0
System.Drawing UNSAFE_ACCESS 0
Microsoft.Build.Utilities.v4.0 UNSAFE_ACCESS 0
System.DirectoryServices UNSAFE_ACCESS 0
System.DirectoryServices.Protocols UNSAFE_ACCESS 0
System.EnterpriseServices UNSAFE_ACCESS 0
System.Runtime.Remoting UNSAFE_ACCESS 0
System.Runtime.Serialization.Formatters.Soap UNSAFE_ACCESS 0
System.Design UNSAFE_ACCESS 0
System.Windows.Forms UNSAFE_ACCESS 0
Accessibility UNSAFE_ACCESS 0
System.Drawing.Design UNSAFE_ACCESS 0
System.Web.RegularExpressions UNSAFE_ACCESS 0
Microsoft.Build.Tasks.v4.0 UNSAFE_ACCESS 0
System.ServiceProcess UNSAFE_ACCESS 0
System.Configuration.Install UNSAFE_ACCESS 0
System.Runtime.Serialization UNSAFE_ACCESS 0
System.ServiceModel.Internals UNSAFE_ACCESS 0
SMDiagnostics UNSAFE_ACCESS 0
Es lohnt sich, sich darüber im Klaren zu sein, was hier tatsächlich passiert, und obwohl die anderen zusätzlichen Assemblys keine Möglichkeiten für T-SQL-Einstiegspunkte haben, sind sie jetzt eine Abhängigkeit. Ich würde die Optionen abwägen, um zu sehen, ob Sie wirklich referenzierenSystem.Web
müssen oder ob es einen anderen Weg gibt, um das zu erreichen, was Sie wollen.
System.Web
nicht in der Liste "Unterstützte Bibliotheken" enthalten ist, auf die Sie verlinkt haben: Es funktioniert nicht garantiert! . Es kann vorkommen, dass Sie auf Situationen stoßen, insbesondere wenn Sie mit ASCII-Zeichensätzen außerhalb der USA arbeiten, die sich nicht wie erwartet verhalten, und Microsoft wird dies nicht beheben. Ich werde in meiner Antwort einen Hinweis dazu hinzufügen, um denjenigen klar zu sein, die es vielleicht nicht wissen.Schauen Sie sich diese Antwort an . Sie müssen nicht verwenden
Uri.UnescapeDataString
oderSystem.Web
. Es gibt eine Klasse, dieWebUtility
innerhalb vonSystem.Net
mit den FunktionenHtmlEncode
und aufgerufen wirdHtmlDecode
.quelle
WebUtility
nur für Benutzer mit SQL Server 2012, 2014 oder neuer verfügbar ist. Diejenigen, die sich noch in SQL Server 2005, 2008 und 2008 R2 befinden, können dies aufgrund der Einführung in .NET Framework 4.0 nicht verwenden.