Как вы заметили, System.Web
это неподдерживаемая библиотека. Для ссылки System.Web
вам нужно будет позвонить на CREATE ASSEMBLY
. Кажется, вы пробовали это, но как вы указали местоположение System.Web.dll
? Вы скопировали / вставили его в другое место? SQL Server попытается найти зависимые сборки в том же месте. Другими словами, если вы ссылаетесь на расположение System.Web.dll
всех других зависимых библиотек, находящихся в одном каталоге, все должно работать нормально. Вот рабочий пример. Я смог добавить как System.Web
сборку, так и вашу сборку:
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
Вы можете видеть из сообщений клиента все другие сборки, которые загружает SQL Server. Но обратите внимание, SQL Server отображает следующее предупреждение для каждого из них:
Ваша регистрация не полностью протестирована в среде, размещенной на SQL Server, и не поддерживается. В будущем, если вы обновите или обслужите эту сборку или .NET Framework, ваша процедура интеграции CLR может перестать работать. Пожалуйста, обратитесь к электронной документации по SQL Server для получения более подробной информации.
Точно так же, но добавляя System.Web
, взгляните на следующие сборки, которые добавляются:
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
Стоит помнить о том, что на самом деле здесь происходит, и хотя другие дополнительные сборки не имеют путей для точек входа T-SQL, они теперь являются зависимостью. Я бы взвесил варианты, чтобы увидеть, нужно ли вам ссылатьсяSystem.Web
или есть другой путь, чтобы выполнить то, что вы хотите.
System.Web
которой нет в списке «Поддерживаемые библиотеки», на который вы ссылаетесь: он не гарантированно работает! , Вы можете столкнуться с ситуациями, особенно при работе с неамериканскими наборами символов ASCII, которые ведут себя не так, как ожидалось, и Microsoft не исправит это. Я добавлю примечание об этом в своем ответе, чтобы быть понятным для тех, кто может не знать.Проверьте этот ответ . Вам не нужно использовать
Uri.UnescapeDataString
илиSystem.Web
. Существует класс, вызываемыйWebUtility
внутриSystem.Net
функцииHtmlEncode
иHtmlDecode
.источник
WebUtility
он доступен только для тех, кто использует SQL Server 2012, 2014 или новее. Те, кто все еще работают на SQL Server 2005, 2008 и 2008 R2, не смогут использовать это из-за того, что они были введены в .NET Framework 4.0.