小编Ram*_*zay的帖子

从SQL Server 2008调用非托管C/C++ DLL函数

我有一个庞大的C/C++函数库,需要从SQL Server 2008调用.我编写了一个C#适配器类,它从Win32 DLL加载这些函数DllImport并将它们公开给.Net代码.这在大多数.Net应用程序中运行得非常好.
现在,我试图使用与SQL Server CLR相同的技术.我创建了一组CLR函数和存储过程,它们调用适配器类.这不会尝试加载非托管DLL结果System.BadImageFormatException.
我可以使用扩展存储过程执行此操作,但该方法已弃用,可能会在任何新版本的SQL Server中停止使用.
从CLR存储过程调用非托管函数的正确方法是什么?我猜这应该在进程外完成.


我试图让我的存储过程调用一个公开这些函数的Web服务.这听起来是个好主意,但到目前为止,我遇到了部署SQLCLR程序集的问题,该程序集使Web服务调用.我无法加载System.ServiceModel.dll程序集version=3.0.0.0,它依赖于System.Web.dll程序集版本2.0.0.0.

加载System.Web程序集给我以下错误:

程序集"System.Web"引用程序集"system.web,version = 2.0.0.0,culture = neutral,publickeytoken = b03f5f7f11d50a3a.",它在当前数据库中不存在.SQL Server尝试从引用程序集来自的相同位置定位并自动加载引用的程序集,但该操作失败(原因:版本,区域性或公钥不匹配).请将引用的程序集加载到当前数据库中,然后重试您的请求.

我找到了部署System.Web程序集问题的解决方案.C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Web.dll它应该从中部署,而不是从中部署它C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.Web.dll.然后也部署了所有其他所需的程序集.

部署顺序中的程序集列表:

  • C:\ Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\SMdiagnostics.dll
  • C:\ WINDOWS\Microsoft.NET\Framework64\V2.0.50727\System.Web.dll中
  • C:\ WINDOWS\Microsoft.NET \框架\ V2.0.50727\System.Messaging.dll
  • C:\ Program Files\Reference Assemblies\Microsoft\Framework\v3.0\System.IdentityModel.dll
  • C:\ Program Files\Reference Assemblies\Microsoft\Framework\v3.0\System.IdentityModel.Selectors.dll
  • C:\ Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\Microsoft.Transactions.Bridge.dll

dll unmanaged clrstoredprocedure sql-server-2008

5
推荐指数
1
解决办法
3335
查看次数