65.9K
CodeProject 正在变化。 阅读更多。
Home

在 x64 位 SQL Server 2005 中使用 32 位 COM DLL

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2009年4月27日

CPOL

2分钟阅读

viewsIcon

25240

在 x64 位 SQL Server 2005 中使用 32 位 COM DLL

引言

本文介绍了如何通过.NET CLR程序集和Web服务在64位SQL Server 2005实例中使用32位COM组件。

背景

以前我的应用程序运行在32位SQL Server 2000实例上,我们使用 Rijndael.dll (32位DLL) 通过xp_OA创建的扩展存储过程来加密/解密 string。但是,当我们迁移到64位SQL Server实例时,Rijndael无法加载。

原因很明显,64位环境无法加载32位DLL。我们不能将此组件存储在数据中,因为数据是由此组件和加密/解密算法加密的,而且我们不能对该组件进行逆向工程。

在CLR程序集(SQL Server项目)中,我们不能使用任何外部DLL,除了属于.NET Framework的少数几个。您不能添加对任何外部程序集的引用。

我们只能通过asmx Web服务和WCF服务在CLR程序集中获得外部组件的服务。

所以我编写了一个CLR程序集和一个asmx Web服务。

为了在CLR程序集中加密/解密字符串,我们调用Web服务,Web服务再调用COM组件。

配置、步骤和代码讨论

首先创建一个Web服务,在此添加对COM组件的引用并公开Web方法。然后创建一个新的数据库项目。

NewDBProj.jpg - Click to enlarge image

将程序集的XML序列化设置为 true,因为该程序集将访问作为外部组件的Web服务。

Serialization.jpg - Click to enlarge image

为了进行外部调用,我们应该拥有XML序列化的程序集。

现在创建一个新的 SqlProcedure,它将调用Web服务。

public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void EncryptString(string palinString)
    {
       //put webservice access code here     
    }
 [Microsoft.SqlServer.Server.SqlProcedure]
    public static void DecryptString(string encryptedString)
    {
       //put webservice access code here    
    } 
 } 

现在构建 Sqlserverproject

部署

  • 首先,我们需要通过执行以下命令来启用数据库CLR:
    EXEC sp_configure 'show advanced options' , '1';
    Go
    reconfigure;
    Go
    
    EXEC sp_configure 'clr enabled' , '1'
    Go
    reconfigure;
    Go
  • 然后,我们必须设置数据库 TRUSTWORTHY
    ALTER DATABASE <DB Name>
    SET TRUSTWORTHY ON

要部署CLR程序集,请打开SQL Server Management Studio,选择您想要的数据库,然后运行创建程序集命令。

首先部署 SqlServerProject1.dll 程序集。

C:\Documents and Settings\My Documents\Visual Studio 2008\Projects\CLRWebS\SqlServerProject1\bin\SqlServerProject1.dll 创建程序集 SqlServerProject1

WITH PERMISSION_SET = EXTERNAL

然后部署序列化的程序集 SqlServerProject1.XmlSerializers.dll

C:\Documents and Settings\My Documents\Visual Studio 2008\Projects\CLRWebS\SqlServerProject1\bin\SqlServerProject1.XmlSerializers.dll 创建程序集 SqlServerProject1xml

WITH PERMISSION_SET = SAFE

测试

部署CLR后,将列出两个存储过程,现在您可以轻松地进行测试。

test.jpg - Click to enlarge image

未来的增强

我们可以创建一个WCF服务并将其作为Windows服务托管,这样它将更加健壮并缩短访问时间。

© . All rights reserved.