1

我正在尝试通过 CLR 程序集在 SQL Server 2008 中使用 Chilkat 加密库。由于 Chilkat 库是如何组合在一起的(请参阅下面的消息),我无法直接执行此操作,需要创建一个引用 Chilkat 库的包装类,但仍按照 SQL Server 所需的方式进行完全管理。

以下是当我询问如何通过 SQL 服务器直接连接他们的库时 Chilkat 的回应(简短的版本是你不能)。

Chilkat .NET 程序集是一个混合模式程序集,这意味着实现是用 C++ 编写并编译为本机代码。外层是一个托管接口。我过去从其他客户那里了解到,在这种情况下,您可以通过在 Visual Studio(完全托管)中创建一个简单的包装类库来解决问题,其中包装程序集引用 Chilkat 程序集,而 SQL Server 对象则引用您的包装组件。鉴于您可能只调用了少数 Chilkat 方法(和属性),编写少数方法将调用转发到包装的 Chilkat 对象并返回结果应该不会有太多工作。

行。所以这就是问题所在。当我在 Visual Studio 2008 中创建 CLR 项目时,我完全无法添加对 Chilkat 库的任何引用(或与此相关的任何其他库)。没有浏览选项卡/按钮/链接或任何添加附加参考库的东西。它根本不存在。

请在我被迫求助于 Clipper 或 dBase3+ 之前提供帮助!

详细信息:SQL Server 2008、Visual Studio 2008、Chilkat 评估库 2011 年 4 月。

4

1 回答 1

1

SQL Server 对允许加载的 CLR 程序集有点挑剔,Visual Studio 会阻止您随意添加任何旧的程序集引用。

这是因为您需要通过数据库的“可编程性”节点下的新程序集工具(右键单击程序集)加载第三方程序集,或者使用CREATE ASSEMBLY.

这使 SQL Server 有机会检查程序集并进行验证,以确保它是支持用于 SQL CLR 集成的类型。这样做是为了确保程序集不会杀死 SQL 服务器或导致稳定性问题。

SQL 联机丛书的这一部分介绍了 SQL CLR 限制:

CLR 集成编程模型限制

Chilikat 程序集将在PEVerify测试中失败(在 EXTERNAL_ACCESS 部分中描述),因为包含非托管函数的混合模式程序集不是可验证的类型安全代码。

如果您尝试安装无法验证的混合模式程序集,则会收到如下错误:

为程序集“ChilkatDotNet2”创建程序集失败,因为程序集“ChilkatDotNet2”格式错误或不是纯 .NET 程序集。无法验证的 PE 标头/本机存根。(Microsoft SQL Server,错误:6544)

这里有一个讨论主题,涵盖了这个主题和一些建议的解决方法。

于 2011-06-13T00:13:51.383 回答