从SQLCLR获取字符串

时间:2012-05-15 07:48:57

标签: sql-server string sqlclr

我需要从各个客户端调用驻留在承载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编写了asembly

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类型不匹配。

1 个答案:

答案 0 :(得分:0)

我相信SqlString对应于nvarchar。

所以,试试这个而不是你当前的最后一个脚本:

CREATE PROC sp_extbox (@receipt nvarchar(4000), @signature nvarchar(4000) out)
AS
EXTERNAL NAME Mybox.Signatures.Sign