PDA

View Full Version : CLR stored procedure SQLServer 2005


aldo6_6_6
01-12-2007, 10:42
Salve,
mi sono avvicinato da poco alle stored procedure clr. Una volta averle implementate, non riesco a mandarle in esecuzione. In pratica il processo di debug di visual studio mi genera il seguente messaggio:
L'esecuzione del codice utente in .NET Framework è disabilitata. Abilitare l'opzione di configurazione "clr enabled".
Per ovviare al problema ho eseguito le seguenti istruzioni da SqlServer Management Studio:
EXEC sp_configure 'clr enabled', 1;
RECONFIGURE WITH OVERRIDE;
GO
Purtroppo, non riesco ugualmente ad eseguirle. Come potrei fare?

Einstein
01-12-2007, 14:10
Innanzitutto, dai un'occhiata a queste linee generali:

http://msdn2.microsoft.com/en-us/library/ms345136.aspx

Una volta compilato il tuo assembly (e abilitata la CLR Integration come hai già fatto), dovrai referenziarlo all'interno del database:

USE tuodb
CREATE ASSEMBLY nomeassembly FROM 'tuoassembly.dll' WITH PERMISSION_SET=SAFE

Fatto questo puoi creare una stored procedure che referenzia il metodo/i metodi nel tuo assembly:

CREATE PROCEDURE usp_nomeproc
AS
EXTERNAL NAME FQDNNomeMetodo

deve FQDN è il nome completo del metodo (namespaces compresi)
Puoi ora eseguire la stored procedure come una qualsiasi altra:

EXEC usp_nomeproc

aldo6_6_6
01-12-2007, 14:50
In pratica le operazioni che mi dici di fare prima di madare in esecuzione la stored procedure le faccio tutte tramite vs2005 con pochi click e alla fine producono lo stesso risultato. Fino qua ci sono. Il problema è che la storedprocedure la riesco a mandare in esecuzione solo da SqlServer Management Studio con il seguente comando:
EXECUTE nomestoredprocedure.
Io ho bisogno di mandarla in esecuzione da una pagina web, quindi di chiamare questa stored procedure dal .cs di una pagina web. E' questo quello che non riesco a fare. Spero di essere stato chiaro.
Saluti Aldo.

Einstein
01-12-2007, 16:38
Per mandarla in esecuzione dal tuo programma C# dovrebbe bastare un normale SqlCommand

SqlConnection conn = new SqlConnection("<connectionstring>");
SqlCommand cmd = new SqlCommand("usp_nomeproc", connection);
cmd.ExecuteNonQuery();
cmd.Dispose();
connection.Dispose();

Ovviamente lo username specificato nella connection string dovrà avere permessi di esecuzione sulla stored procedure.

aldo6_6_6
01-12-2007, 16:43
Ho risolto. In pratica ho semplicemente modificato la stringa di connessione al database. Ho eliminato l'attach inserendo l'initial catalog con l'SSPI come integration security. Il problema riguardava i permessi. In pratica in questo modo ho il pieno controllo del db, invece che utilizzare un'istanza utente generica.
Ciao e grazie lo stesso per l'aiuto.