【发布时间】:2013-07-21 09:41:06
【问题描述】:
我编写了一个 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);
}
}
}
它使用欧洲增值税检查网络服务 (Link to webservice) 提供的另一个免费库并使用他们的库 (Library code)(这段代码又长又复杂,我猜你可以阅读我的。
嗯。我在 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 将 db 所有者更改为 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 可能不信任该程序集 或不安全。再次运行查询,或查看文档以了解如何 解决装配信任问题。有关此的更多信息 错误:System.IO.FileLoadException:无法加载文件或程序集 'webservicevateuropa,版本=0.0.0.0,文化=中性, PublicKeyToken=null' 或其依赖项之一。给定的程序集 名称或代码库无效。 (HRESULT 异常:0x80131047)
System.IO.FileLoadException:
在 System.Reflection.Assembly._nLoad(AssemblyName 文件名,字符串 代码库、证据组装安全、组装位置提示、 StackCrawlMark& stackMark,布尔 throwOnFileNotFound,布尔 forIntrospection)
在 System.Reflection.Assembly.InternalLoad(AssemblyName 组件引用, 证据组装Security, StackCrawlMark& stackMark, Boolean forIntrospection)
在 System.Reflection.Assembly.InternalLoad(String assemblyString, 证据 assemblySecurity, StackCrawlMark& stackMark, Boolean for Introspection)
在 System.Reflection.Assembly.Load(String assemblyString)
可能是什么?我找不到任何东西来解决它...
【问题讨论】:
-
当您想在项目符号(或编号)列表中正确格式化代码 sn-ps 时,您需要将其缩进 8 个空格(不仅仅是 4 个)
-
对于其他正在寻找答案的人,我发现了这个问题的组合,stackoverflow.com/q/2193720/192999 帮助了我。干杯。
标签: c# sql sql-server-2005 clr .net-assembly