Condividi tramite


Esempio Hello World

Nell'esempio Hello World vengono illustrate le operazioni di base per la creazione, la distribuzione e il test di una stored procedure semplice basata sull'integrazione con CLR. Nell'esempio viene inoltre illustrato come restituire dati tramite un record, che viene costruito in modo dinamico dalla stored procedure e restituito al chiamante.

La HelloWorld stored procedure restituisce la stringa "Hello world!" in un set di risultati costituito da una riga. Questo esempio illustra alcuni usi per le classi Microsoft.SqlServer.Server.SqlMetaData, Microsoft.SqlServer.Server.SqlDataRecord e Microsoft.SqlServer.Server.Pipe.

Prerequisiti

Per creare ed eseguire questo progetto, è necessario installare il software seguente:

  • SQL Server o SQL Server Express. È possibile ottenere SQL Server Express gratuitamente dal sito Web documentazione ed esempi di SQL Server Express

  • Database AdventureWorks disponibile nel sito Web SQL Server Developer

  • .NET Framework SDK 2.0 o versione successiva oppure Microsoft Visual Studio 2005 o versione successiva. .NET Framework SDK è disponibile gratuitamente.

  • È necessario inoltre che siano soddisfatte le condizioni seguenti:

  • L'istanza di SQL Server in uso deve avere l'integrazione CLR abilitata.

  • Per abilitare l'integrazione con CLR, effettuare le operazioni seguenti:

    Abilitazione dell'integrazione con CLR

    • Eseguire i comandi Transact-SQL seguenti:

    sp_configure 'clr enabled', 1

    GO

    RECONFIGURE

    GO

    Nota

    Per abilitare CLR, è necessario disporre dell'autorizzazione ALTER SETTINGS a livello di server, che viene assegnata implicitamente ai membri dei ruoli predefiniti del server sysadmin e serveradmin.

  • Il database AdventureWorks deve essere installato nell'istanza di SQL Server in uso.

  • Se non si è un amministratore per l'istanza di SQL Server in uso, è necessario disporre di un amministratore che conceda l'autorizzazione CreateAssembly per completare l'installazione.

Compilazione dell'esempio

Creare ed eseguire l'esempio tramite le istruzioni seguenti:

  1. Aprire un prompt dei comandi di .NET Framework o Visual Studio.

  2. Se necessario, creare una directory per l'esempio. Per questo esempio verrà utilizzata la directory C:\MySample.

  3. In c:\MySample creare HelloWorld.vb (per l'esempio Visual Basic) o HelloWorld.cs (per l'esempio C#) e copiare nel file il codice di esempio appropriato, Visual Basic o C#, riportato di seguito.

  4. Compilare il codice di esempio dal prompt della riga di comando eseguendo una delle istruzioni seguenti, a seconda del linguaggio scelto.

    • vbc C:HelloWorld.vb /target:library

    • csc /target:library HelloWorld.cs

  5. Copiare il codice di installazione Transact-SQL in un file e salvarlo come Install.sql nella directory di esempio.

  6. Distribuire l'assembly e la stored procedure eseguendo

    • sqlcmd -E -I -i install.sql -v root = "C:\MySample\"
  7. Copiare lo script del comando di test Transact-SQL in un file e salvarlo come test.sql nella directory di esempio.

  8. Eseguire lo script di test con il comando seguente

    • sqlcmd -E -I -i test.sql
  9. Copiare lo script di pulizia Transact-SQL in un file e salvarlo come cleanup.sql nella directory di esempio.

  10. Eseguire lo script con il comando seguente

    • sqlcmd -E -I -i cleanup.sql

Codice di esempio

Di seguito sono illustrati i listati di codice per l'esempio.

C#

using System;  
using System.Data;  
using System.Data.SqlClient;  
using System.Data.SqlTypes;  
using Microsoft.SqlServer.Server;  
public partial class StoredProcedures  
{  
    [Microsoft.SqlServer.Server.SqlProcedure]  
    public static void HelloWorld()  
    {  
        Microsoft.SqlServer.Server.SqlMetaData columnInfo  
                = new Microsoft.SqlServer.Server.SqlMetaData("Column1", SqlDbType.NVarChar, 12);  
        SqlDataRecord greetingRecord  
            = new SqlDataRecord(new Microsoft.SqlServer.Server.SqlMetaData[] { columnInfo });  
        greetingRecord.SetString(0, "Hello world!");  
        SqlContext.Pipe.Send(greetingRecord);  
    }  
};  
  

Visual Basic

Imports System  
Imports System.Data  
Imports System.Data.Sql  
Imports System.Data.SqlTypes  
Imports Microsoft.SqlServer.Server  
  
Partial Public NotInheritable Class StoredProcedures  
    <Microsoft.SqlServer.Server.SqlProcedure()> _  
    Public Shared Sub HelloWorld()  
        Dim columnInfo As New Microsoft.SqlServer.Server.SqlMetaData("Column1", _  
            SqlDbType.NVarChar, 12)  
        Dim greetingRecord As New SqlDataRecord(New  _  
            Microsoft.SqlServer.Server.SqlMetaData() {columnInfo})  
        greetingRecord.SetString(0, "Hello World!")  
        SqlContext.Pipe.Send(greetingRecord)  
    End Sub  
End Class  

Si tratta dello script di installazione Transact-SQL (Install.sql), che distribuisce l'assembly e crea la stored procedure nel database.

USE AdventureWorks  
GO  
IF EXISTS (SELECT * FROM sys.procedures WHERE [name] = 'usp_HelloWorld')  
DROP PROCEDURE usp_HelloWorld;  
GO  
IF EXISTS (SELECT * FROM sys.assemblies WHERE [name] = 'HelloWorld')  
DROP ASSEMBLY HelloWorld;  
GO  
DECLARE @SamplesPath nvarchar(1024)  
set @SamplesPath = '$(root)'  
CREATE ASSEMBLY HelloWorld   
FROM @SamplesPath + 'HelloWorld.dll'  
WITH permission_set = Safe;  
GO  
  
CREATE PROCEDURE usp_HelloWorld  
--(  
--    @Greeting nvarchar(12) OUTPUT  
--)  
AS EXTERNAL NAME HelloWorld.[StoredProcedures].HelloWorld;  
GO  

Di seguito è illustrato lo script test.sql che consente di testare l'esempio eseguendo la stored procedure.

use AdventureWorks  
go  
execute usp_HelloWorld  
  
USE AdventureWorks;  
GO  
IF EXISTS (SELECT * FROM sys.procedures WHERE [name] = 'usp_HelloWorld')  
DROP PROCEDURE usp_HelloWorld;  
GO  

Il codice Transact-SQL seguente rimuove l'assembly e la stored procedure dal database.

USE AdventureWorks  
GO  
  
IF EXISTS (SELECT * FROM sys.procedures WHERE [name] = 'usp_HelloWorld')  
DROP PROCEDURE usp_HelloWorld;  
GO  
  
IF EXISTS (SELECT * FROM sys.assemblies WHERE [name] = 'HelloWorld')  
DROP ASSEMBLY HelloWorld;  
GO  

Vedere anche

Scenari di utilizzo ed esempi per l'integrazione con CLR (Common Language Runtime)