1

デジタル署名を取得するために、さまざまなクライアントから 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 

しかし、上記のスクリプトを実行すると、

パラメーター "@receipt" の T-SQL と CLR の型が一致しないため、"sp_extbox" の CREATE PROCEDURE が失敗しました。

4

1 に答える 1

0

SqlString は nvarchar に対応すると思います。

したがって、現在の最後のスクリプトの代わりにこれを試してください。

CREATE PROC sp_extbox (@receipt nvarchar(4000), @signature nvarchar(4000) out)
AS
EXTERNAL NAME Mybox.Signatures.Sign
于 2012-05-15T08:03:02.330 に答える