Home > Articoli > SQLCLR Projects: come referenziare assembly esterne

SQLCLR Projects: come referenziare assembly esterne

Visual Studio 2005 mette a disposizione diversi template per la creazione di progetti SQLCLR. Creando un progetto ci accorgeremo ben presto che è impossibile utilizzare delle reference, salvo alcune predefinite dall’IDE.

Per ovviare a tale limitazione è necessario “sporcarsi le mani” all’interno dei file di progetto e seguire alcuni semplici passaggi.  La solution che ho creato e che potete scaricare qui è composta da due proget

  • MySQLCLRAssembly: il progetto SQLCLR al cui interno troviamo la funzione MyFunction
  • MyAssembly: la nostra assembly esterna o “di terze parti” che vogliamo usare nel progetto SQLCLR

Per prima cosa dobbiamo compilare il progetto MyAssembly , ottenendo nella cartella /bin/debug il file MyAssembly.dll

Il secondo step da compiere è quello di aprire con un qualsiasi editor di testo il file MySQLCLRAssembly.csproj (file di definizione del nostro progetto), identificare al suo interno la sezione <ItemGroup> ed aggiungere questo nuovo frammento xml: 

    <Reference Include="MyAssembly" >
    <SpecificVersion>False</SpecificVersion>
     <HintPath> C:\Projects\SQLCLRExternalReference\MyAssembly\bin\Debug\MyAssembly.dll </HintPath>
    </Reference>

Il path C:\Projects\MyAssembly\bin\Debug\MyAssembly.dll è il percorso dove risiede l’assembly compilata precedentemente.

Dopo aver salvato le modifiche riaprire il progetto MySQLCLRAssembly e verificare che nella lista delle reference ci sia MyAssembly.

A questo punto possiamo utilizzare la nostra nuova reference all’interno del nostro progetto SQL CLR:

using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using MyAssembly;

public class UserDefinedFunctions
{
    [SqlFunction]     public static SqlString MyFunction()
    {
        Myclass myclass = new Myclass();
        return new SqlString(myclass.DoSothing());
    }
};

L’ultimo passo per poter finalmente utilizzare la nostra funzione anche da T-SQL è l’operazione di deploy su SQL Server. Visual Studio mette a disposizione il comando "Deploy" per installare su SQL tutto il necessario, ma nel nostro caso particolare dovremmo utilizzare degli statement T-SQL manuali. Ecco come:

Carichiamo MyAssembly.dll

CREATE ASSEMBLY [MyAssembly] AUTHORIZATION [dbo] FROM ‘C:\Projects\SQLCLRExternalReference\MySQLCLRAssembly\bin\Debug\MyAssembly.dll’
WITH PERMISSION_SET = SAFE
GO

Carichiamo MySQLCLRAssembly.dll:

CREATE ASSEMBLY [MySQLCLRAssembly] AUTHORIZATION [dbo] FROM ‘C:\Projects\SQLCLRExternalReference\MySQLCLRAssembly\bin\Debug\MySQLCLRAssembly.dll’
WITH PERMISSION_SET = SAFE
GO

Eseguiamo lo statement di CREATE della nuova UDF:

 

CREATE FUNCTION [dbo].[MyFunction]()
RETURNS [nvarchar](4000) WHIT EXECUTE AS CALLER
AS
EXTERNAL NAME [MySQLCLRAssembly].[UserDefinedFunctions].[MyFunction] GO

 

Con quest’ ultimo passaggio saremo in grado di usufrire della funzione MyFunction che non farà nient’altro che chiamare il metodo DoSomething all’interno della nostra assembly custom MyAssembly.dll.

 

Chi è Davide Mauri

Microsoft Data Platform MVP dal 2007, Davide Mauri si occupa di Data Architecture e Big Data nel mondo dell'IoT. Attualmente ricopre il ruolo di "Director Software Development & Cloud Infrastructure" in Sensoria, societa specializzata nella creazione di Wearables e sensori per l'IoT applicati a tessuti ed oggetti sportivi.

Leggi Anche

Unit testing: Come scrivere la tua prima unit test!

Nell’articolo precedente, il secondo di questa serie, abbiamo descritto come installare il framework tSQLt, il …