3

我正在尝试使用 .NET CLR 创建存储过程。我成功地将以下代码编译成 .NET 3.5 DLL。

Imports System.Math
Imports System.Text.RegularExpressions
Imports Microsoft.SqlServer.Server

Partial Public Class LevenshteinerAndSoundexer

    <SqlProcedure()> _
    Public Shared Function getLevenshteinDistance(ByVal string1 As String, ByVal String2 As String) As Integer

然后,我使用以下代码成功地将其添加为程序集:

create assembly
LevenshteinLibrary
from 'Path\LevenshteinLibrary.dll'

但是当我用这段代码创建程序时

create procedure testCLR(@s1 nvarchar(1000), @s2 nvarchar(1000))
as external NAME LevenshteinLibrary.LevenshteinerAndSoundexer.getLevenshteinDistance

我得到错误

“在程序集 'LevenshteinLibrary' 中找不到类型 'LevenshteinLibrary'”

为什么它不能“看到”这个功能?

当我在 ILSpy 中检查 DLL 时,会发生以下情况:

在此处输入图像描述

这是我扩展库时的样子

在此处输入图像描述

4

1 回答 1

3

根据您上传的图片,您的类LevenshteinerAndSoundexer位于 namespace 下LevenshteinLibrary。因此,在定义要使用的类时,您需要包含类的命名空间(在方括号内,以免混淆解析器):

create procedure testCLR(@s1 nvarchar(1000), @s2 nvarchar(1000))
as external NAME LevenshteinLibrary.[LevenshteinLibrary.LevenshteinerAndSoundexer].getLevenshteinDistance
--  Name of object in SQL --^                          ^    Name of function in class --^
--           Full name of class (including namespace)-/
于 2013-05-20T21:16:53.920 回答