none
Spostare Funzioni scritte in C# in SQL Server RRS feed

  • Domanda

  • Premetto che sto studiando sul libro T-SQL QUERYING, capitolo 8.

    Sto provando a creare delle funzioni statistiche con il Visual Studio 2017 usando il linguaggio C#, e poi riportarle in SQL Server.
    Nel fare questa operazione è necessario creare un Assembly.
    Come primo passo ho lanciato questo comando:

    EXEC sp_configure 'clr enabled', 1;
    RECONFIGURE WITH OVERRIDE

    Poi nel management studio ho scritto questo codice:

    CREATE ASSEMBLY DescriptiveStatistics
    FROM 'C:\temp\DescriptiveStatistics.dll'
    WITH PERMISSION_SET = SAFE;

    ed è uscito questo messaggio di errore:

    Messaggio 10343, livello 14, stato 1, riga 4.  L'istruzione CREATE o ALTER ASSEMBLY per l'assembly 'DescriptiveStatistics' con l'opzione SAFE o EXTERNAL_ACCESS non è riuscita perché l'opzione 'clr strict security' di sp_configure è impostata su 1. Microsoft consiglia di firmare l'assembly con un certificato o una chiave asimmetrica a cui è associato un account di accesso con l'autorizzazione UNSAFE ASSEMBLY. In alternativa, è possibile considerare attendibile l'assembly mediante sp_add_trusted_assembly.

    -----------
    Quindi ho provato a lanciare il seguente comando ma esce un errore:

    EXEC sp_add_trusted_assembly

    errore:
    Messaggio 201, livello 16, stato 11, procedura sp_add_trusted_assembly, riga 1 [riga iniziale del batch 2]
    La procedura o funzione 'sp_add_trusted_assembly' prevede il parametro 'hash', che non è stato specificato.
    ---------------

    Come posso risolvere il problema di importare un codice C# nel SQL Server ?
    Chi mi aiuta ?
    Cordiali Saluti.
    venerdì 9 marzo 2018 19:53

Risposte

Tutte le risposte

  • Ho fatto una prova, cambiando istanza di SQL Server.

    Mi sono creato su altra istanza del SQL Server un piccolo database, con una tabella.

    Poi in Visual Studio, ho aperto il progetto con le formule statistiche scritte in C#, poi clic destro sul nome del progetto, in Proprietà, Compilazione SQLCLR, flag su ottimizza codice e su "Genera Assembly di serializzazione" scegliere Attivato.

    Su Debug, su Stringa di connessione di destinazione, scegliere il DB che deve ricevere gli Assembly.   Salva ed esci.

    Questa volta il passaggio dati da Visual Studio in SQL Server ha funzionato.

    In SQL Server mi ritrovo un assembly e due funzioni statistiche in Programmazione, Funzioni, Funzioni di Aggregazione.

    Il problema rimane questo comando:

    EXEC sp_configure 'clr enabled', 1;
    RECONFIGURE WITH OVERRIDE

    Per il corretto funzionamento delle funzioni in una query, è necessario togliere quell' 1 dall'istanza di SQL Server, dato che negli errori che escono si fa sempre riferimento a quel valore di 1.

    Come fare ?


    • Modificato RobertIt69 sabato 10 marzo 2018 12:06
    sabato 10 marzo 2018 12:05
  • non riesco a seguirti...

    il comando che esegui fa questo

    https://docs.microsoft.com/it-it/sql/relational-databases/clr-integration/clr-integration-enabling

    e il suo utilizzo è il seguente

    https://msdn.microsoft.com/it-it/library/ms131052%28v=sql.120%29.aspx?f=255&MSPPError=-2147217396

    ma perchè ti serve ?


    Edoardo Benussi
    Microsoft MVP - Cloud and Datacenter Management
    e[dot]benussi[at]outlook[dot]it

    lunedì 12 marzo 2018 12:07
    Moderatore
  • Ho scritto il codice qui sotto nel management studio, e l'ho lanciato.

    L'istanza del SQL Server è stata modificata da 0 a 1.

    sp_configure 'show advanced options', 1; 
    GO 
    RECONFIGURE; 
    GO 
    sp_configure '
    clr enabled', 1; 
    GO 
    RECONFIGURE; 
    GO 

    Ho provato a trasferire un codice C# da Visual Studio in Sql Server, ma esce comunque questo errore:

    Messaggio 10343, livello 14, stato 1, riga 4.  L'istruzione CREATE o ALTER ASSEMBLY per l'assembly 'DescriptiveStatistics' con l'opzione SAFE o EXTERNAL_ACCESS non è riuscita perché l'opzione 'clr strict security' di sp_configure è impostata su 1. Microsoft consiglia di firmare l'assembly con un certificato o una chiave asimmetrica a cui è associato un account di accesso con l'autorizzazione UNSAFE ASSEMBLY. In alternativa, è possibile considerare attendibile l'assembly mediante sp_add_trusted_assembly.

    dove l'errore sembra essere "clr strict security' di sp_configure è impostata su 1".

    Come si risolve ?

    lunedì 12 marzo 2018 14:08
  • Sto provando e riprovando, ma con il SQL Server Express 2017 non funziona il collegamento con il Visual Studio, in particolare nel passare le funzioni scritte con codice C#.

    Per caso c'è qualche problema nel programma ?

    La mia versione del programma è la 17.3

    martedì 20 marzo 2018 17:53
  • calma. non so cosa stai tentando di fare ma ti spiace provare a riprodurre quanto scritto come esempio qui

    https://msdn.microsoft.com/it-it/library/ms131052%28v=sql.120%29.aspx?f=255&MSPPError=-2147217396

    e riportare se qualcosa non ti funziona descrivendo il punto ?


    Edoardo Benussi
    Microsoft MVP - Cloud and Datacenter Management
    e[dot]benussi[at]outlook[dot]it

    mercoledì 21 marzo 2018 08:26
    Moderatore
  • Sto cercando di imparare la "programmabilità" del SQL Server vers. Express 2017.  Per far ciò uso il Visual Studio Community 2017, con cui scrivo codice in C#, funzioni ed altro, e poi provo a trasferirle nel database presente nel SQL Server.

    Qui di seguito scrivo le fasi con cui ho ottenuto senza errori il passaggio dati da Visual Studio in SQL Server.

    - creo un database di nome alfa;

    - scrivere il seguente nel Management Studio: EXEC sp_configure 'clr enabled',1; su questo punto seguire le istruzioni ed avvertenze che si trovano sul sito docs.microsoft.com

    - creo un progetto in VS di nome alfa;

    - nel progetto di VS, clic destro sul nome del progetto, in proprietà, 1) indicare in "impostazione progetto" Piattaforma: SQL Server 2014;  2) in SQLCLR "frame di destinazione": .NET FRAMEWORK 4.5;  3) in Debug, "stringa di connessione di destinazione": scegliere il Database del Sql Server 2014.

    - nel progetto di VS, aggiungi nuovo elemento, scegliere TIPO DEFINITO DALL'UTENTE SQLCLR C#, scrivendo stored procedure o funzioni.

    Compilare e distribuire dal VS al SS.

    Ho eseguito questi passi usando il SQL Server Express 2014, ed ha funzionato tutto senza problemi.

    Ho eseguito gli stessi passi usando il SQL Server Express 2017 e non ha funzionato !!!

    C'è qualche bug ?  Oppure il problema sta nel tipo di .NET FRAMEWORK ??

    P.S.: ho seguito l'esempio indicato dal link, usando Visual Studio per scrivere il codice C#, e poi ho lanciato la stored procedure HelloWorld con SQL Server Exp 2014, ed ha funzionato.  Rimane da capire solo il perché non funziona con il SQL Server Exp 2017.

    • Modificato RobertIt69 mercoledì 21 marzo 2018 10:45
    mercoledì 21 marzo 2018 10:09
  • non trovo segnalazioni specifiche di bug sul caso da te segnalato.

    mi confermi che, a parità di tutto il resto (framework, versione di visual studio, ecc.ecc.) l'unica cosa che cambia tra la situazione funzionante e quella con l'errore è la versione di sql server che passa dalla express 2014 alla express 2017 ?


    Edoardo Benussi
    Microsoft MVP - Cloud and Datacenter Management
    e[dot]benussi[at]outlook[dot]it

    lunedì 26 marzo 2018 08:12
    Moderatore
  • L'istanza del sql server 2014 è expressadv, mentre l'istanza del sql server 2017 è solo express.

    Può essere questo ?

    martedì 27 marzo 2018 08:46
  • è abbastanza probabile che il motivo sia quello

    https://docs.microsoft.com/it-it/sql/sql-server/editions-and-components-of-sql-server-2017

    cambia versione.


    Edoardo Benussi
    Microsoft MVP - Cloud and Datacenter Management
    e[dot]benussi[at]outlook[dot]it

    martedì 27 marzo 2018 08:54
    Moderatore