У меня есть папка с 3 DLL-файлами в папке на сервере, которую я использую для создания сборки. Сначала я попробовал следующий код и получил сообщение об ошибке, в котором говорилось, что он не может найти файл system.data.datasetextensions.dll на сервере, и я скопировал и вставил dll с моего компьютера в ту же папку, где находился мой проект clr и снова попытался запустить команду.Развертывание проекта SQL CLR сбой при создании сборки в базе данных
Create Assembly OoplesCLR from 'c:\ooplesclr\OoplesFinanceCLR.dll' with Permission_set = SAFE
GO
Я теперь получаю эту ошибку после копирования DLL с моего компьютера в серверную папку
Warning: The Microsoft .NET Framework assembly 'system.data.datasetextensions, version=4.0.0.0, culture=neutral, publickeytoken=b77a5c561934e089.' you are registering is not fully tested in the SQL Server hosted environment and is not supported. In the future, if you upgrade or service this assembly or the .NET Framework, your CLR integration routine may stop working. Please refer SQL Server Books Online for more details.
Msg 6218, Level 16, State 2, Line 1
CREATE ASSEMBLY for assembly 'OoplesFinanceCLR' failed because assembly 'System.Data.DataSetExtensions' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database. CLR Verifier error messages if any will follow this message
[ : System.Data.DataRowComparer::get_Default][mdToken=0x6000001][offset 0x00000000] Code size is zero.
[ : System.Data.DataRowComparer`1[TRow]::Equals][mdToken=0x6000004][offset 0x00000000] Code size is zero.
[ : System.Data.DataRowComparer`1[TRow]::GetHashCode][mdToken=0x6000005][offset 0x00000000] Code size is zero.
[ : System.Data.DataRowComparer`1[TRow]::.cctor][mdToken=0x6000006][offset 0x00000000] Code size is zero.
[ : System.Data.DataRowComparer`1[TRow]::.ctor][mdToken=0x6000002][offset 0x00000000] Code size is zero.
[ : System.Data.DataRowComparer`1[TRow]::get_Default][mdToken=0x6000003][offset 0x00000000] Code size is zero.
[ : System.Data.DataTableExtensions::CopyToDataTable[T]][mdToken=0x6000008][offset 0x00000000] Code size is zero.
[ : System.Data.DataTableExtensions::CopyToDataTable[T]][mdToken=0x6000009][offset 0x00000000] Code size is zero.
[ : System.Data.DataTableExtensions::CopyToDataTable[T]][mdToken=0x600000a][offset 0x00000000] Code size is zero.
[ : System.Data.DataTableExtensions::AsDataView[T]][mdToken=0x600000c][offset 0x00000000] Code size is zero.
[ : System.Data.DataTableExtensions::AsEnumerable][mdToken=0x6000007][offset 0x00000000] Code size is zero.
[ : System.Data.DataTableExtensions::AsDataView][mdToken=0x600000b][offset 0x00000000] Code size is zero.
[ : System.Data.EnumerableRowCollection::System.Collections.IEnumerable.GetEnumerator][mdToken=0x600000e][offset 0x00000000] Code size is zero.
[ : System.Data.EnumerableRowCollection::.ctor][mdToken=0x600000d][offset 0x00000000] Code size is zero.
[ : System.Data.EnumerableRowCollection`1[TRow]::System.Collections.IEnumerable.GetEnumerator][mdToken=0x600000f][offset 0x00000000] Code size is zero.
Что я делаю неправильно и как я могу это исправить?
UPDATE 1: Я изменил базу данных, заслуживающим доверия, а затем запустил эту команду, и я получаю ту же ошибку:
Создать DataSetExtensions Assembly из «C: \ ooplesclr \ System.Data.DataSetExtensions.dll» с Permission_set = UNSAFE GO
ОБНОВЛЕНИЕ 2: Попытка создать функцию в той же базе данных для запуска сборки. Моя определена пользовательская функция заключается в следующем:
public partial class UserDefinedFunctions
{
[SqlFunction]
public static SqlString CalculateInfo()
{
// first get data from the tables and then process the data
getData();
// Put your code here
return new SqlString ("test");
}
UPDATE 3: Я создал функцию без каких-либо предупреждений или ошибок с помощью следующего кода, но я не могу запустить его, потому что он говорит, что нет такой хранимой процедуры не существует ...
GO
CREATE FUNCTION [dbo].[CalculateInfo]
()
RETURNS NVARCHAR (MAX)
AS
EXTERNAL NAME [OoplesCLR].[UserDefinedFunctions].[CalculateInfo]
UPDATE 4: Даже если он говорит нет такой хранимой процедуры не существует, мне удалось запустить его, и я получаю следующее сообщение об ошибке:
Msg 6522, Level 16, State 1, Line 4
произошла
приложения .NET Framework ошибки во время выполнение пользовательской подпрограммы или агрегата «CalculateInfo»: System.Security.HostProtectionException: Попытка выполнить операцию, которая была запрещена узлом CLR.
The protected resources (only available with full trust) were: All
The demanded resources were: Synchronization, ExternalThreading
System.Security.HostProtectionException:
at UserDefinedFunctions.getData()
at UserDefinedFunctions.CalculateInfo()
Как исправить это исключение?
Вопрос не в порядке? Я предполагаю, что ошибка, отмеченная в первом абзаце, что вы получили после того, как скопировали эту DLL в папку со своей библиотекой SQLCLR во втором абзаце, не так ли? И какая версия SQL Server будет развернута? –
@srutzky Да, я до сих пор не замечал, что вопрос вышел из строя. Но да, вы правы – user3610374