![](/img/trans.png)
[英]Can't find my c# CLR table value assembly in the list or create the associate SQL function
[英]SQL Server can't find my function in my DLL / Assembly
您可以使用以下代码在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。
程序集“ ManagedCodeAndSQLServer”中的“ BaseFunctionClass”。
问题很细微,在这里这样的在线格式中,它甚至似乎只是格式问题。 但问题完全在方括号内找到:
AS EXTERNAL NAME ManagedCodeAndSQLServer.[ManagedCodeAndSQLServer.
BaseFunctionClass].GetMessage
ManagedCodeAndSQLServer.
之后有一个实际的换行符ManagedCodeAndSQLServer.
那不应该在那里。 它甚至反映在错误消息中:
消息6505,级别16,状态2,过程usp_UseHelloDotNetAssembly,第1行
找不到类型'ManagedCodeAndSQLServer。
程序集“ ManagedCodeAndSQLServer”中的“ BaseFunctionClass”。
再次看起来像是个单词问题
包装;-),但不是。 如果删除了换行符,则T-SQL如下所示:
AS EXTERNAL NAME ManagedCodeAndSQLServer.[ManagedCodeAndSQLServer.BaseFunctionClass].GetMessage;
那么它将正常工作。
一些附加说明:
sa
东西。 sysadmin
固定服务器角色的任何成员都已经具有所有权限。 SAFE
。 除非绝对必要,否则请勿将任何大会标记为UNSAFE
。 TRUSTWORTHY ON
。 这是安全隐患,除非绝对必要,否则应避免。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.