Я создал библиотечный класс на C# с помощью этого кода, как вы можете видеть:
namespace ManagedCodeAndSQLServer
{
public class BaseFunctionClass
{
public BaseFunctionClass()
{
}
[SqlProcedure]
public static void GetMessage(SqlString strName, out SqlString
strMessge)
{
strMessge = "Welcome," + strName + ", " + "your code is getting executed under CLR !";
}
}
}
Я построил этот проект со свойством UNSAFE
Permission Set и добавил DLL в SQL Server, используя этот код:
use master;
grant external access assembly to [sa];
use SampleCLR;
CREATE ASSEMBLY ManagedCodeAndSQLServer
AUTHORIZATION dbo
FROM 'd:\ManagedCodeAndSQLServer.dll'
WITH PERMISSION_SET = UNSAFE
GO
Он добавил сборку как часть моей базы данных.
Я хочу вызвать функцию, как вы можете видеть:
CREATE PROCEDURE usp_UseHelloDotNetAssembly
@name nvarchar(200),
@msg nvarchar(MAX)OUTPUT
AS EXTERNAL NAME ManagedCodeAndSQLServer.[ManagedCodeAndSQLServer.
BaseFunctionClass].GetMessage
GO
Но я получаю эту ошибку:
Сообщение 6505, уровень 16, состояние 2, процедура usp_UseHelloDotNetAssembly, строка 1
Не удалось найти тип «ManagedCodeAndSQLServer.
BaseFunctionClass» в сборке «ManagedCodeAndSQLServer».
UNSAFE
, нет абсолютно никаких причин для того, чтобы этот код не был помечен какSAFE
. Кроме того, вам никогда не нужно предоставлять разрешения дляsa
, так как этот логин всегда имеет все разрешения. - person Solomon Rutzky   schedule 17.02.2017TRUSTWORTHY ON
. Это ненужный риск для безопасности. Кроме того, это только на уровне БД, а не на уровне сервера. - person Solomon Rutzky   schedule 17.02.2017formatting
:). Кроме того, я только что просмотрел эту статью, и она ужасна. Его следует удалить из codeproject. Пожалуйста, забудьте, что вы когда-либо видели это. Если вы изучаете SQLCLR, см. серию статей, которые я пишу по этой теме в SQL Server Central: Stairway to SQLCLR (для ознакомления с их содержимым требуется бесплатная регистрация). Я пробую ваш код в своей системе. Дам тебе знать. - person Solomon Rutzky   schedule 17.02.2017[ManagedCodeAndSQLServer.BaseFunctionClass]
, и это сработало. Я предположил, что новая строка в вашем SQL и даже в сообщении об ошибке была из-за форматирования, выполненного здесь, на S.O. Но похоже, что это действительно есть в вашем коде. Удалите новую строку, и она должна работать. Если это так, я опубликую ответ на него. - person Solomon Rutzky   schedule 17.02.2017