gpt4 book ai didi

c# - 在 SQL CLR 中访问 COM

转载 作者:太空狗 更新时间:2023-10-29 22:33:14 24 4
gpt4 key购买 nike

祝大家有个愉快的一天!

我需要您的建议,以解决过去三天我一直在思考的问题。我有一个用非托管平台编写的 COM 组件。该组件有一个返回某种敏感数据的方法,我需要在获得该值后立即存储它。

我需要的是调用一个 UDF 来访问 COM 对象并获取值。到目前为止,我已经尝试过了,但出现了这个异常:

Msg 6522, Level 16, State 2, Line 1
A .NET Framework error occurred during execution of user-defined routine or aggregate "GetRate": System.Runtime.InteropServices.COMException: Retrieving the COM class factory for component with CLSID {D039A99F-5D45-42C7-A53C-507913D8C6D6} failed due to the following error: 80040154.
System.Runtime.InteropServices.COMException:
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache)
at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at UserDefinedFunctions.GetRate(SqlString Source_Currency_Name, SqlString Destination_Currency_Name, SqlMoney Amount, SqlBoolean Mode)

函数好像看不到注册的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 服务。每一条指导我通过这种方式的建议都将不胜感激。

谢谢大家

最佳答案

一般来说,我不建议使用 SQL CLR 对象作为 COM 和 SQL 之间的桥梁。那里有很多潜在的注意事项,从安全性开始,到非常繁琐的发布程序结束,需要对生产 sql 框进行物理访问,这可能很容易也可能不容易获得。

我还注意到您正在使用 Activator.CreateInstance,然后向其提供 clsid。在您的原始帖子中,您暗示它是一个 COM clsid。我不确定在 SQL CLR 中创建的 AppDomain 中工作的 Activator 是否真的可以找到 com clsid 的对象。

我会尝试的方式:

  • 为您的 com 创建托管代理
  • 确保它已签名并放入 gac
  • 尝试从 SQL CLR 访问该托管代理

但我严重怀疑它是否有效。任何远程处理解决方案 WCF/WebServices/Remoting 甚至 SQL Broker 似乎都是更好的选择。

简而言之,如果没有看到实际的 .net 和 sql codez,很难说出更多内容。

关于c# - 在 SQL CLR 中访问 COM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13533375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com