Connettersi al database SQL tramite C e C++Connect to SQL Database using C and C++

Questo post è destinato agli sviluppatori di C e C++ che vogliono connettersi al database SQL di Azure.This post is aimed at C and C++ developers trying to connect to Azure SQL DB. È suddiviso in sezioni, pertanto è possibile passare alla sezione desiderata.It is broken down into sections so you can jump to the section that best captures your interest.

Prerequisiti per l'esercitazione su C/C++Prerequisites for the C/C++ tutorial

Assicurarsi di avere quanto segue:Make sure you have the following items:

Database SQL di Azure ed SQL Server nelle macchine virtualiAzure SQL Database and SQL Server on virtual machines

Azure SQL si basa su Microsoft SQL Server ed è progettato per garantire un servizio efficiente, scalabile e a disponibilità elevata.Azure SQL is built on Microsoft SQL Server and is designed to provide a high-availability, performant, and scalable service. L'uso di SQL Azure presenta diversi vantaggi rispetto all'uso del database proprietario in esecuzione in locale.There are many benefits to using SQL Azure over your proprietary database running on premises. Con SQL Azure non è necessario installare, configurare, conservare o gestire il database, ma solo il contenuto e la struttura.With SQL Azure you don’t have to install, set up, maintain, or manage your database but only the content and the structure of your database. Alcuni elementi tipici dei database che destano preoccupazione, ad esempio la ridondanza e la tolleranza di errore, sono incorporati.Typical things that we worry about with databases like fault tolerance and redundancy are all built in.

Azure attualmente offre due opzioni per l'hosting dei carichi di lavoro su SQL Server: database SQL di Azure, database come servizio ed SQL Server in Macchine virtuali (VM).Azure currently has two options for hosting SQL server workloads: Azure SQL database, database as a service and SQL server on Virtual Machines (VM). Non verranno qui descritte nel dettaglio le differenze tra queste due opzioni. Il database SQL di Azure rappresenta tuttavia la soluzione migliore per le nuove applicazioni basate sul cloud per sfruttare la riduzione dei costi e l'ottimizzazione delle prestazioni offerte dai servizi cloud.We will not get into detail about the differences between these two except that Azure SQL database is your best bet for new cloud-based applications to take advantage of the cost savings and performance optimization that cloud services provide. Se si intende eseguire la migrazione o estendere le applicazioni locali al cloud, SQL server nella macchina virtuale di Azure può rappresentare l'opzione più appropriata.If you are considering migrating or extending your on-premises applications to the cloud, SQL server on Azure virtual machine might work out better for you. Per semplicità, in questo articolo verrà creato un database SQL di Azure.To keep things simple for this article, let's create an Azure SQL database.

Tecnologie di accesso ai dati: ODBC e OLE DBData access technologies: ODBC and OLE DB

La connessione al database SQL di Azure è del tutto analoga e attualmente sono disponibili due modi per connettersi ai database: ODBC (Open Database Connectivity) e OLE DB (Object Linking and Embedding Database).Connecting to Azure SQL DB is no different and currently there are two ways to connect to databases: ODBC (Open Database connectivity) and OLE DB (Object Linking and Embedding database). Negli ultimi anni Microsoft si è allineata a ODBC per l'accesso ai dati relazionali nativi.In recent years, Microsoft has aligned with ODBC for native relational data access. ODBC è relativamente semplice e molto più veloce rispetto a OLE DB.ODBC is relatively simple, and also much faster than OLE DB. Si tenga tuttavia presente che ODBC usa una vecchia API di tipo C.The only caveat here is that ODBC does use an old C-style API.

Passaggio 1: Creazione di un database SQL di AzureStep 1: Creating your Azure SQL Database

Vedere la pagina introduttiva per informazioni su come creare un database di esempio.See the getting started page to learn how to create a sample database. In alternativa, è possibile guardare questo breve video di due minuti per creare un database SQL di Azure mediante il portale di Azure.Alternatively, you can follow this short two-minute video to create an Azure SQL database using the Azure portal.

Passaggio 2: Ottenere la stringa di connessioneStep 2: Get connection string

Dopo aver eseguito il provisioning del database SQLdi Azure, è necessario eseguire la procedura seguente per determinare le informazioni di connessione e aggiungere l'IP client per l'accesso al firewall.After your Azure SQL database has been provisioned, you need to carry out the following steps to determine connection information and add your client IP for firewall access.

Nel portale di Azure passare alla stringa di connessione ODBC del database SQL di Azure usando l'opzione Show database connection strings (Mostra stringhe di connessione del database) elencata come parte della sezione relativa alle informazioni generali del database:In Azure portal, go to your Azure SQL database ODBC connection string by using the Show database connection strings listed as a part of the overview section for your database:

ODBCConnectionString

ODBCConnectionStringProps

Copiare il contenuto della stringa ODBC (include Node.js) [SQL authentication].Copy the contents of the ODBC (Includes Node.js) [SQL authentication] string. Questa stringa verrà usata successivamente per connettersi dall'interprete della riga di comando ODBC di C++ .We use this string later to connect from our C++ ODBC command-line interpreter. La stringa include informazioni dettagliate quali il driver, il server e altri parametri di connessione al database.This string provides details such as the driver, server, and other database connection parameters.

Passaggio 3: Aggiungere l'indirizzo IP al firewallStep 3: Add your IP to the firewall

Passare alla sezione relativa al firewall per il server di database e aggiungere l'IP client al firewall seguendo i passaggi seguenti per assicurarsi di stabilire correttamente la connessione:Go to the firewall section for your Database server and add your client IP to the firewall using these steps to make sure we can establish a successful connection:

AddyourIPWindow

A questo punto, il database SQL di Azure è stato configurato ed è possibile connettersi dal codice C++.At this point, you have configured your Azure SQL DB and are ready to connect from your C++ code.

Passaggio 4: Connessione da un'applicazione C/C++ per WindowsStep 4: Connecting from a Windows C/C++ application

È possibile connettersi facilmente al database SQL di Azure tramite ODBC in Windows seguendo questo esempio compilato con Visual Studio.You can easily connect to your Azure SQL DB using ODBC on Windows using this sample that builds with Visual Studio. Nell'esempio viene implementato un interprete della riga di comando ODBC che può essere usato per connettersi al database SQL di Azure.The sample implements an ODBC command-line interpreter that can be used to connect to our Azure SQL DB. In questo esempio viene accettato come argomento della riga di comando un file DSN (Database Source Name ) oppure la stringa di connessione dettagliata copiata in precedenza dal portale di Azure.This sample takes either a Database source name file (DSN) file as a command-line argument or the verbose connection string that we copied earlier from the Azure portal. Visualizzare la pagina delle proprietà per il progetto e incollare la stringa di connessione come argomento di comando, come illustrato di seguito:Bring up the property page for this project and paste the connection string as a command argument as shown here:

Propsfile DNS

Assicurarsi di specificare i dettagli di autenticazione corretti per il database come parte della stringa di connessione al database.Make sure you provide the right authentication details for your database as a part of that database connection string.

Avviare l'applicazione per compilarla.Launch the application to build it. Se la connessione ha esito positivo, verrà visualizzata la finestra seguente.You should see the following window validating a successful connection. È anche possibile eseguire alcuni semplici comandi SQL come crea tabella per convalidare la connettività al database:You can even run some basic SQL commands like create table to validate your database connectivity:

Comandi SQL

In alternativa, è possibile creare un file DSN mediante la procedura guidata avviata quando non è specificato alcun argomento di comando.Alternatively, you could create a DSN file using the wizard that is launched when no command arguments are provided. Si consiglia di provare anche questa opzione.We recommend that you try this option as well. È possibile usare questo file DSN per l'automazione e per proteggere le impostazioni di autenticazione:You can use this DSN file for automation and protecting your authentication settings:

Creare un file DSN

Congratulazioni.Congratulations! È stata correttamente stabilita una connessione ad Azure SQL mediante C++ e ODBC in Windows.You have now successfully connected to Azure SQL using C++ and ODBC on Windows. È possibile continuare la lettura per eseguire la stessa operazione sulla piattaforma Linux.You can continue reading to do the same for Linux platform as well.

Passaggio 5: Connessione da un'applicazione C/C++ per LinuxStep 5: Connecting from a Linux C/C++ application

Visual Studio ora consente di sviluppare anche applicazioni C++ per Linux.In case you haven’t heard the news yet, Visual Studio now allows you to develop C++ Linux application as well. Per informazioni su questo nuovo scenario, vedere il blog Visual C++ for Linux Development (Visual C++ per sviluppo di applicazioni Linux).You can read about this new scenario in the Visual C++ for Linux Development blog. Per la compilazione per Linux è necessario un computer remoto in cui è in esecuzione la distribuzione Linux.To build for Linux, you need a remote machine where your Linux distro is running. Se non si ha disponibile un computer remoto con Linux, è possibile configurarlo rapidamente seguendo i passaggi presenti nell'articolo Linux Azure Virtual machines (Macchine virtuali di Linux in Azure).If you don’t have one available, you can set one up quickly using Linux Azure Virtual machines.

Per questa esercitazione, si supponga di avere configurata una distribuzione di Linux Ubuntu 16.04.For this tutorial, let us assume that you have an Ubuntu 16.04 Linux distribution set up. I passaggi qui di seguito si applicano anche a Ubuntu 15.10, Red Hat 6 e Red Hat 7.The steps here should also apply to Ubuntu 15.10, Red Hat 6, and Red Hat 7.

I passaggi seguenti consentono di installare le librerie necessarie per ODBC ed SQL per la distribuzione:The following steps install the libraries needed for SQL and ODBC for your distro:

sudo su
sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/mssql-ubuntu-test/ xenial main" > /etc/apt/sources.list.d/mssqlpreview.list'
sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893
apt-get update
apt-get install msodbcsql
apt-get install unixodbc-dev-utf16 #this step is optional but recommended*

Avviare Visual Studio.Launch Visual Studio. In Strumenti -> Opzioni -> Multipiattaforma -> Gestione connessioni aggiungere una connessione alla casella di Linux:Under Tools -> Options -> Cross Platform -> Connection Manager, add a connection to your Linux box:

Opzioni degli strumenti

Dopo aver stabilito la connessione tramite SSH, creare un modello di progetto vuoto (Linux):After connection over SSH is established, create an Empty project (Linux) template:

Nuovo modello di progetto

È quindi possibile aggiungere un nuovo file di origine C e sostituirlo con questo contenuto.You can then add a new C source file and replace it with this content. Tramite le API ODBC SQLAllocHandle SQLSetConnectAttr ed SQLDriverConnect dovrebbe essere possibile inizializzare e stabilire una connessione al database.Using the ODBC APIs SQLAllocHandle, SQLSetConnectAttr, and SQLDriverConnect, you should be able to initialize and establish a connection to your database. Come nell'esempio di ODBC per Windows, è necessario sostituire la chiamata SQLDriverConnect con i dettagli dei parametri della stringa di connessione al database copiata in precedenza dal portale di Azure.Like with the Windows ODBC sample, you need to replace the SQLDriverConnect call with the details from your database connection string parameters copied from the Azure portal previously.

 retcode = SQLDriverConnect(
    hdbc, NULL, "Driver=ODBC Driver 13 for SQL"
                "Server;Server=<yourserver>;Uid=<yourusername>;Pwd=<"
                "yourpassword>;database=<yourdatabase>",
    SQL_NTS, outstr, sizeof(outstr), &outstrlen, SQL_DRIVER_NOPROMPT);

L'ultima operazione da eseguire prima della compilazione consiste nell'aggiungere odbc come dipendenza della libreria:The last thing to do before compiling is to add odbc as a library dependency:

Aggiunta di ODBC come libreria di input

Per avviare l'applicazione, visualizzare la console Linux nel menu Debug:To launch your application, bring up the Linux Console from the Debug menu:

Console Linux

Se la connessione è stata stabilita correttamente, viene visualizzato il nome del database corrente stampato nella console Linux:If your connection was successful, you should now see the current database name printed in the Linux Console:

Output della finestra della console Linux

Congratulazioni.Congratulations! L'esercitazione è stata completata ed è ora possibile connettersi al database SQL di Azure da C++ nelle piattaforme Windows e Linux.You have successfully completed the tutorial and can now connect to your Azure SQL DB from C++ on Windows and Linux platforms.

Ottenere la soluzione completa per l'esercitazione su C/C++Get the complete C/C++ tutorial solution

La soluzione GetStarted contenente tutti gli esempi riportati in questo articolo è disponibile su GitHub:You can find the GetStarted solution that contains all the samples in this article at github:

Passaggi successiviNext steps

Risorse aggiuntiveAdditional resources