2012-05-14 4 views
0

다음과 같은 문제가 있습니다. SQL Server를 호스팅하는 PC에있는 LAN 내의 다양한 클라이언트에서 DLL에 액세스해야합니다.SQLCLR에서 결과 얻기

법적인 세금 체크섬을 반환하려면 모든 클라이언트에서이 DLL에 액세스해야합니다.

서버에서 DLL을 호출하고 체크섬을 반환하는 CLR 프로 시저를 만들려고 생각했습니다.

CREATE ASSEMBLY MyChecksum 
    from 'C:\Users\Panos\Documents\Visual Studio 2010\Projects\DigitalSignature\Algobox\bin\Debug\checksum.dll' 
    WITH PERMISSION_SET = UNSAFE 
:

나는

는 내가 SQL Server의 어셈블리를 생성

[SqlProcedure] 
public static int HelloWorld(int h) 
{ 
    return h; 
} 

C#에서 DLL을 생성 .... 일부 인터넷 예제를 따라 간단한하여 HelloWorld 응용 프로그램을 만들어

절차를 만들었습니다.

CREATE PROC sp_mychecksum (@h int) 
AS 
EXTERNAL NAME MyAlgobox.Signatures.HelloWorld 

결론은 내 절차 (exec sp_mychecksum
12
)을 실행할 때 나는 단지 메시지

명령 (들)을 성공적으로

아닌 12

모든 단서를 완료 얻을입니까?

+0

당신이 @rc의 INT를 선언'실행하면 당신은 무엇을 어떻게해야합니까; exec @rc = sp_mychecksum 12; @ rc'를 선택 하시겠습니까? –

+0

이 사이트는 저장 프로 시저뿐만 아니라 CLR 스칼라 및 테이블 값 함수를 구현하는 몇 가지 훌륭한 예제를 제공합니다. http://www.wisesoft.co.uk/articles/sql_server_clr_io_utility.aspx 또한 귀하의 무기고 . – brian

답변

0

일을 정의한 방식에 따라 HelloWorld() 메서드의 반환 값이 저장 프로 시저의 반환 값으로 반환됩니다. 질문의 의견 @Damien_The_Unbeliever에 의해 제안 그래서, 이것은 당신이 SQL Server에서 찾고있는 무엇을 얻을 것이다 :

DECLARE @rc int 
EXEC @rc = sp_mychecksum 12 
SELECT @rc 

당신하여 HelloWorld() 메서드 같이 결과 값을 반환을 사용하려면, 이 같은 (경고, 테스트되지 않은)해야 할 것 :

[SqlProcedure] 
public static int HelloWorld(int h) { 
    SqlDataRecord record = new SqlDataRecord(new SqlMetaData("colname", SqlDbType.Int)); 
    record.SetSqlInt32(0, h); 
    SqlContext.Pipe.Send(record); 
} 

그러나, 사용 사례 주어, 나는 당신이 SQL 함수에 기존 CLR 루틴을 매핑 할 생각을하지 저장 프로 시저 . 이 같은 예를 들어, 일이 같은

CREATE FUNCTION dbo.f_mychecksum(@h int) RETURNS int 
WITH EXECUTE AS CALLER 
AS 
EXTERNAL NAME MyAlgobox.Signatures.HelloWorld 

그리고 그것을 사용 :

SELECT dbo.f_mychecksum (12)

+0

고맙다 Clark와 Damien !! – PanosPlat

+0

고맙습니다! 하지만 지금은 DLL 함수에 의해 반환 된 문자열 체크섬이 있어야하며 Int, BigInt 만 반환 될 수 있다고 말합니다. – PanosPlat