Principale utente con più risposte
Spostare Funzioni scritte in C# in SQL Server

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 OVERRIDEPoi 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.
Risposte
-
è abbastanza probabile che il motivo sia quello
https://docs.microsoft.com/it-it/sql/sql-server/editions-and-components-of-sql-server-2017
Edoardo Benussi
Microsoft MVP - Cloud and Datacenter Management
e[dot]benussi[at]outlook[dot]it- Proposto come risposta Edoardo BenussiMVP, Moderator martedì 27 marzo 2018 08:54
- Contrassegnato come risposta Edoardo BenussiMVP, Moderator lunedì 9 aprile 2018 14:28
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 OVERRIDEPer 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
-
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
Edoardo Benussi
Microsoft MVP - Cloud and Datacenter Management
e[dot]benussi[at]outlook[dot]it -
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;
GOHo 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 ?
-
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
-
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 -
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
-
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 -
-
è abbastanza probabile che il motivo sia quello
https://docs.microsoft.com/it-it/sql/sql-server/editions-and-components-of-sql-server-2017
Edoardo Benussi
Microsoft MVP - Cloud and Datacenter Management
e[dot]benussi[at]outlook[dot]it- Proposto come risposta Edoardo BenussiMVP, Moderator martedì 27 marzo 2018 08:54
- Contrassegnato come risposta Edoardo BenussiMVP, Moderator lunedì 9 aprile 2018 14:28