我需要从各种客户端调用驻留在托管 SQL Server 的 PC 中的外部 DLL 以获得数字签名。
我认为使用 SQLCLR 是个好主意。但我有问题......
我写这个是为了调用 C# dll 中的外部 dll 函数
[Microsoft.SqlServer.Server.SqlProcedure]
public static void Sign( SqlString receipt, out SqlString signature)
{
short result=0;
string arg = "";
string commPort = "1";
signature = "";
bool btrue = true, bfalse = false;
string CommPort = commPort.ToString();
string Receipt = receipt.ToString();
string Signature = signature.ToString();
ExtDll.Box ExtBox = new Box();
ExtBox.Sign_(ref CommPort,Receipt,ref result,ref Signature,ref bfalse,ref arg,ref btrue);
signature = (SqlString)Signature;
}
我为 SQL Server 编写了程序集
CREATE ASSEMBLY Mybox
FROM 'C:\Users\Panos\Documents\Visual Studio 2010\Projects\DigitalSignature\Extbox\bin\Debug\Extbox.dll'
WITH PERMISSION_SET = UNSAFE
我写了一个存储过程
CREATE PROC sp_extbox (@receipt char(2048), @signature char(100) out)
AS
EXTERNAL NAME Mybox.Signatures.Sign
但是当我执行上面的脚本时,我得到
“sp_extbox”的 CREATE PROCEDURE 失败,因为参数“@receipt”的 T-SQL 和 CLR 类型不匹配。