我编写了一个需要从存储过程调用的 C# DLL。
我在执行的所有步骤中都遇到了错误,并设法解决了它们。但现在我厌倦了错误,我不得不在这里求助。我解决不了这个。我在将这个 .DLL 安装到 SQL Server 中所做的每一个小步骤,我都有大量的错误需要解决。
这是程序的 C# 代码(编译为类库以获取 DLL):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Xml;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
namespace WebServiceVatEuropa
{
public class WebServiceVatEuropaClass
{
#region "Default Constructor"
public WebServiceVatEuropaClass()
{
}
#endregion
[SqlProcedure]
public static void check(string country, string vatNum)
{
bool valid;
string name;
string address;
checkVatService vatchecker = new checkVatService();
vatchecker.checkVat(ref country, ref vatNum, out valid, out name, out address);
}
}
}
哪个使用欧洲增值税检查网络服务提供的另一个免费库(链接到网络服务)并使用他们的库(库代码)(这个代码很长而且很复杂,我猜你可以阅读我的。
出色地。我在 SQL Server Management Studio 中使用以下代码创建了存储过程(我在这里遇到了很多问题,很多错误等等,但现在它可以工作了):
CREATE PROCEDURE VAT_CHECKER
@Naz_codi nvarchar(2),
@vatNum nvarchar(max)
AS EXTERNAL NAME WebServiceVatEuropaClass.[WebServiceVatEuropa.WebServiceVatEuropaClass].[check]
GO
然后在数据库中我有:
使用来自 msn 的代码启用 clr
sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'clr enabled', 1; GO RECONFIGURE; GO
将数据库所有者更改为 sa
使用此代码注册程序集
CREATE ASSEMBLY [WebServiceVatEuropaClass] --AUTHORIZATION [mydb\administrator] FROM 'C:\Upload\WebServiceVatEuropa.dll' --WITH PERMISSION_SET = SAFE WITH PERMISSION_SET = UNSAFE --WITH PERMISSION_SET = EXTERNAL_ACCESS
然后当我启动
EXEC VAT_CHECKER 'IT','10050721009'
我收到此错误:
尝试加载程序集 id 65545 时,Microsoft .NET Framework 中发生错误。服务器可能资源不足,或者程序集可能不受 PERMISSION_SET = EXTERNAL_ACCESS 或 UNSAFE 的信任。再次运行查询,或查看文档以了解如何解决程序集信任问题。有关此错误的更多信息:System.IO.FileLoadException:无法加载文件或程序集“webservicevateuropa,版本=0.0.0.0,文化=中性,PublicKeyToken=null”或其依赖项之一。给定的程序集名称或代码库无效。(来自 HRESULT 的异常:0x80131047)
System.IO.FileLoadException:
在 System.Reflection.Assembly._nLoad(AssemblyName fileName,String codeBase,证据 assemblySecurity,Assembly locationHint,StackCrawlMark 和 stackMark,布尔 throwOnFileNotFound,Boolean forIntrospection)
在 System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef,证据 assemblySecurity , StackCrawlMark& stackMark, Boolean forIntrospection)
在 System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
在 System.Reflection.Assembly.Load(String assemblyString)
它可能是什么?我找不到任何东西来修复它...