Condividi tramite


Usare Funzioni di Azure per connettersi al database SQL di Azure

Questo articolo illustra come usare Funzioni di Azure per creare un processo pianificato che si connette a un database SQL di Azure o a un Istanza gestita di SQL di Azure. Il codice della funzione pulisce le righe in una tabella nel database. La nuova funzione C# viene creata in base a un modello di trigger timer predefinito in Visual Studio 2019. Per supportare questo scenario, è necessario anche impostare una stringa di connessione di database come impostazione app nell'app per le funzioni. Per Istanza gestita di SQL di Azure è necessario abilitare l'endpoint pubblico per potersi connettere da Funzioni di Azure. Questo scenario esegue un'operazione in blocco sul database.

Se si tratta della prima esperienza di utilizzo di funzioni C#, è consigliabile leggere la Guida di riferimento per gli sviluppatori C# di Funzioni di Azure.

Prerequisiti

  • Completare la procedura descritta nell'articolo Creare la prima funzione usando Visual Studio per creare un'app per le funzioni locale destinata alla versione 2.x o successiva del runtime. È anche necessario aver pubblicato il progetto in un'app per le funzioni in Azure.

  • Questo articolo illustra un comando Transact-SQL che esegue un'operazione di pulizia in blocco nella tabella SalesOrderHeader nel database di esempio AdventureWorksLT. Per creare il database di esempio AdventureWorksLT, completare la procedura descritta nell'articolo Creare un database in database SQL di Azure usando il portale di Azure.

  • È necessario aggiungere una regola del firewall a livello di server per l'indirizzo IP pubblico del computer usato per questa guida introduttiva. Questa regola è necessaria per poter accedere all'istanza di database SQL dal computer locale.

Ottenere informazioni di connessione

È necessario ottenere il stringa di connessione per il database creato al termine Creare un database in database SQL di Azure usando il portale di Azure.

  1. Accedere al portale di Azure.

  2. Scegliere Database SQL dal menu a sinistra, quindi scegliere il database nella pagina Database SQL.

  3. Selezionare Stringhe di connessione in Impostazioni e copiare la stringa di connessione ADO.NET completa. Per Istanza gestita di SQL di Azure copiare stringa di connessione per l'endpoint pubblico.

    Copiare la stringa di connessione per ADO.NET.

Impostare la stringa di connessione

Un'app per le funzioni ospita l'esecuzione delle funzioni in Azure. Come procedura consigliata per la sicurezza è opportuno archiviare le stringhe di connessione e altre informazioni riservate nelle impostazioni dell'app per le funzioni. L'uso delle impostazioni dell'applicazione impedisce la diffusione accidentale della stringa di connessione con il codice. È possibile accedere alle impostazioni dell'app per l'app per le funzioni direttamente da Visual Studio.

È necessario aver precedentemente pubblicato l'app in Azure. Se non è già stato fatto, pubblicare l'app per le funzioni in Azure.

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto dell'app per le funzioni e scegliere Pubblica.

  2. Nella pagina Pubblica selezionare i puntini di sospensione (...) nell'area Hosting e scegliere Gestisci impostazioni del servizio app Azure.

    Gestire le impostazioni servizio app per l'app per le funzioni.

  3. In Impostazioni applicazione selezionare Aggiungi impostazione, in Nuovo nome dell'impostazione dell'app digitare sqldb_connectione selezionare OK.

    Aggiungere un'impostazione dell'app per l'app per le funzioni.

  4. Nella nuova impostazione sqldb_connection incollare la stringa di connessione copiata nella sezione precedente nel campo Locale e sostituire i segnaposto {your_username} e {your_password} con valori reali. Selezionare Inserisci valore da locale per copiare il valore aggiornato nel campo Remoto e quindi selezionare OK.

    Aggiungere l'impostazione della stringa di connessione SQL.

    Le stringhe di connessione vengono archiviate crittografate in Azure (remoto). Per evitare perdite di segreti, è consigliabile escludere il file di progetto local.settings.json (locale) dal controllo del codice sorgente, ad esempio usando un file con estensione gitignore.

Aggiungere il pacchetto SqlClient al progetto

È necessario aggiungere il pacchetto NuGet che contiene la libreria SqlClient. Questa libreria di accesso ai dati è necessaria per connettersi a database SQL.

  1. Aprire il progetto dell'app per le funzioni locale in Visual Studio 2022.

  2. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto di app per le funzioni e scegliere Gestisci pacchetti NuGet.

  3. Nella scheda Sfoglia cercare Microsoft.Data.SqlClient e, dopo averlo trovato, selezionarlo.

  4. Nella pagina Microsoft.Data.SqlClient selezionare versione 5.1.0 e quindi fare clic su Installa.

  5. Al termine dell'installazione, rivedere le modifiche e quindi fare clic su OK per chiudere la finestra Anteprima.

  6. Se viene visualizzata una finestra Accettazione della licenza fare clic su Accetto.

A questo punto, è possibile aggiungere il codice della funzione C# che si connette al database SQL.

Aggiungere una funzione attivata da un timer

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto di app per le funzioni e scegliere Aggiungi>Nuova funzione di Azure.

  2. Con il modello Funzioni di Azure selezionato, assegnare al nuovo elemento un nome simile a DatabaseCleanup.cs e selezionare Aggiungi.

  3. Nella finestra di dialogo Nuova funzione di Azure scegliere Trigger timer e quindi Aggiungi. Questa finestra di dialogo crea un file di codice per la funzione attivata da timer.

  4. Aprire il nuovo file di codice e aggiungere le istruzioni using seguenti all'inizio del file:

    using Microsoft.Data.SqlClient;
    using System.Threading.Tasks;
    
  5. Sostituire la funzione Run esistente con il codice seguente:

    [FunctionName("DatabaseCleanup")]
    public static async Task Run([TimerTrigger("*/15 * * * * *")]TimerInfo myTimer, ILogger log)
    {
        // Get the connection string from app settings and use it to create a connection.
        var str = Environment.GetEnvironmentVariable("sqldb_connection");
        using (SqlConnection conn = new SqlConnection(str))
        {
            conn.Open();
            var text = "UPDATE SalesLT.SalesOrderHeader " +
                    "SET [Status] = 5  WHERE ShipDate < GetDate();";
    
            using (SqlCommand cmd = new SqlCommand(text, conn))
            {
                // Execute the command and log the # rows affected.
                var rows = await cmd.ExecuteNonQueryAsync();
                log.LogInformation($"{rows} rows were updated");
            }
        }
    }
    

    Questa funzione viene eseguita ogni 15 secondi per aggiornare la colonna Status in base alla data di spedizione. Per altre informazioni relative al trigger timer, vedere Trigger timer per Funzioni di Azure.

  6. Premere F5 per avviare l'app per le funzioni. Verrà visualizzata la finestra di esecuzione Strumenti di base di Funzioni di Azure in secondo piano rispetto a Visual Studio.

  7. 15 secondi dopo l'avvio, la funzione viene eseguita. Osservare l'output e notare il numero di righe aggiornate nella tabella SalesOrderHeader.

    Visualizzare i log di funzione.

    Alla prima esecuzione dovrebbero essere aggiornate 32 righe di dati. Le esecuzioni successive non aggiornano alcuna riga di dati, a meno che non si apportino modifiche ai dati della tabella SalesOrderHeader in modo che vengano selezionate altre righe dall'istruzione UPDATE.

Se si intende pubblicare questa funzione, ricordarsi di modificare l'attributo TimerTrigger specificando una pianificazione CRON più ragionevole rispetto a ogni 15 secondi. È anche necessario assicurarsi che l'app per le funzioni possa accedere al database SQL di Azure o Istanza gestita di SQL di Azure. Per altre informazioni, vedere uno dei collegamenti seguenti in base al tipo di SQL di Azure:

Passaggi successivi

Si vedrà ora come usare Funzioni con app per la logica per l'integrazione con altri servizi.

Per altre informazioni su Funzioni, vedere gli articoli seguenti: