SQL Server:在程序集中找不到类型 [英] SQL Server: Could not find type in the assembly

查看:53
本文介绍了SQL Server:在程序集中找不到类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设程序集dll:

使用 Microsoft.SqlServer.Server;使用 System.Data.SqlClient;使用 System.Data.SqlTypes;使用系统;使用 System.Text;命名空间 CLRF 函数{公开课T{[SqlFunction(DataAccess = DataAccessKind.Read)]public static String NormalizeString(String s, String normalizationForm){NormalizationForm 表单 = NormalizationForm.FormC;if (String.Equals(f, "FormD", StringComparison.OrdinalIgnoreCase))form = NormalizationForm.FormD;return = s.Normalize(form);}}}

注意:将程序集定位到 .NET 3.5,因为 SQL Server 不支持 .NET 4.0

将程序集复制到某个位置,然后创建"程序集即可正常工作:

CREATE ASSEMBLY CLRFunctions FROM 'c:\Program Files\My App\CLRFunctions.dll';

注意:然后启用CLR功能,否则就是

解决方案

尝试

CREATE FUNCTION NormalizeString(@s nvarchar(max),@normalizationForm nvarchar(50))返回 nvarchar(max)作为外部名称 CLRFunctions.[CLRFunctions.T].NormalizeString

Assume the assembly dll:

using Microsoft.SqlServer.Server;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System;
using System.Text;

namespace CLRFunctions
{
    public class T
    {
        [SqlFunction(DataAccess = DataAccessKind.Read)]
        public static String NormalizeString(String s, String normalizationForm)
        {
            NormalizationForm form = NormalizationForm.FormC;

            if (String.Equals(f, "FormD", StringComparison.OrdinalIgnoreCase))
                form = NormalizationForm.FormD;

            return = s.Normalize(form);
        }
    }
}

Note: Target the assembly to .NET 3.5 as SQL Server doesn't support .NET 4.0

Copy the assembly to a location, and "creating" the assembly works fine:

CREATE ASSEMBLY CLRFunctions FROM 'c:\Program Files\My App\CLRFunctions.dll';

Note: And then enable CLR functions, otherwise they are broken by default:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO

Created the user-defined function fails:

CREATE FUNCTION NormalizeString(@s nvarchar(max), @normalizationForm varchar(50)) 
RETURNS nvarchar(max)
AS EXTERNAL NAME CLRFunctions.T.NormalizeString

fails with error:

Msg 6505, Level 16, State 2, Procedure NormalizeString, Line 1
Could not find Type 'T' in assembly 'CLRFunctions'.

Why can SQL Server not find type T in assembly CLRFunctions?

Note: Why T? Cause Microsoft did.

解决方案

Try

CREATE FUNCTION NormalizeString(@s nvarchar(max), 
                                @normalizationForm nvarchar(50)) 
RETURNS nvarchar(max)
AS EXTERNAL NAME CLRFunctions.[CLRFunctions.T].NormalizeString

这篇关于SQL Server:在程序集中找不到类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆