【发布时间】:2012-11-12 01:43:40
【问题描述】:
希望大家有个美好的一天!
对于过去三天我一直在思考的事情,我需要您的建议。我有一个用非托管平台编写的 COM 组件。该组件有一个返回某种敏感数据的方法,我需要在获得该值后立即存储它。
我需要的是调用 UDF 来访问 COM 对象并获取值。到目前为止,我已经尝试过了,但遇到了这个异常:
消息 6522,第 16 级,状态 2,第 1 行
在执行用户定义的例程或聚合“GetRate”期间发生 .NET Framework 错误: System.Runtime.InteropServices.COMException:检索 COM 类 具有 CLSID 的组件的工厂 {D039A99F-5D45-42C7-A53C-507913D8C6D6} 由于以下原因而失败 错误:80040154。
System.Runtime.InteropServices.COMException:
在 System.RuntimeTypeHandle.CreateInstance(RuntimeType 类型,布尔 publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck)
在 System.RuntimeType.CreateInstanceSlow(布尔 publicOnly,布尔 填充缓存)
在 System.RuntimeType.CreateInstanceImpl(布尔 publicOnly,布尔 skipVisibilityChecks,布尔 fillCache)
在 System.Activator.CreateInstance(类型类型,布尔非公共)
在 UserDefinedFunctions.GetRate(SqlString Source_Currency_Name, SqlString Destination_Currency_Name、SqlMoney 金额、SqlBoolean 模式)
该函数似乎看不到已注册的 COM 组件 (80040154)。 clr 程序集注册为不受限制。我尝试使用“sa”或 Windows 集成模式调用 UDF。没有区别。
这是初始化 COM 组件的代码,代码在 SQL 之外工作正常:
Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("D039A99F-5D45-42C7-A53C-507913D8C6D6"), true))
有没有办法让这个工作人员?一种或另一种方式,我需要一个 UDF 调用这个 COM 对象,或者至少通过这个 UDF 使用 .NET 远程访问一些 Windows 服务。我们将不胜感激每一个指导我完成这种方式的建议。
谢谢大家。
【问题讨论】:
-
@DJKRAZE 我已经提到代码在 SQL 之外运行良好。 :)
-
@BehnamEsmaili 看来该链接已经解决了在 SQL 之外启动 COM 对象的问题,正如我已经提到的,我对此没有任何问题。
-
你检查异常有没有内部异常?
-
没错,但“SQL 外部”可能是不同于“SQL 内部”的进程位数。
标签: c# sql-server-2008 com user-defined-functions sqlclr