Conectar-se ao Banco de Dados SQL usando C e C++Connect to SQL Database using C and C++

Esta postagem é destinada a desenvolvedores de C e C++ que tentam se conectar ao Banco de Dados de SQL do Azure.This post is aimed at C and C++ developers trying to connect to Azure SQL DB. Ele é dividido em seções para que você possa ir direto para aquela que melhor captura seu interesse.It is broken down into sections so you can jump to the section that best captures your interest.

Pré-requisitos para o tutorial do C/C++Prerequisites for the C/C++ tutorial

Verifique se você tem o seguinte:Make sure you have the following items:

Banco de dados SQL do Azure e SQL Server em máquinas virtuaisAzure SQL Database and SQL Server on virtual machines

O Azure SQL baseia-se no Microsoft SQL Server e foi projetado para fornecer uma alta disponibilidade, desempenho e serviço escalonável.Azure SQL is built on Microsoft SQL Server and is designed to provide a high-availability, performant, and scalable service. Há muitos benefícios em usar o SQL Azure em vez do seu banco de dados proprietário em execução no local.There are many benefits to using SQL Azure over your proprietary database running on premises. Com o SQL Azure, você não precisa instalar, configurar, manter ou gerenciar o banco de dados, somente o conteúdo e a estrutura do seu banco de dados.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. Causas de preocupação típicas de bancos de dados como redundância e tolerância a falhas estão incluídos.Typical things that we worry about with databases like fault tolerance and redundancy are all built in.

O Azure atualmente tem duas opções para hospedar cargas de trabalho do SQL Server: Banco de Dados SQL do Azure, banco de dados como um serviço e o SQL Server em Máquinas Virtuais (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). Não entraremos em detalhes sobre as diferenças entre esses dois, exceto que o Banco de Dados SQL do Azure é a melhor opção para novos aplicativos baseados em nuvem aproveitarem a economia de custo e otimização de desempenho que os serviços de nuvem fornecem.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 você estiver pretendendo migrar ou estender seus aplicativos locais para a nuvem, o SQL Server na máquina virtual do Azure pode funcionar melhor para você.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. Para manter as coisas simples neste artigo, vamos criar um Banco de Dados SQL do Azure.To keep things simple for this article, let's create an Azure SQL database.

Tecnologias de acesso a dados: ODBC e OLE DBData access technologies: ODBC and OLE DB

Conectar-se ao Banco de Dados SQL do Azure não é diferente, e atualmente há duas maneiras para conectar aos bancos de dados: ODBC (Open Database Connectivity) e OLE DB (banco de dados vinculação e incorporação de objetos).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). Nos últimos anos, a Microsoft tem se alinhado com o ODBC para acesso a dados relacionais nativos.In recent years, Microsoft has aligned with ODBC for native relational data access. O ODBC é relativamente simples e também muito mais rápido que o OLE DB.ODBC is relatively simple, and also much faster than OLE DB. A única limitação é que o ODBC usa uma API de estilo C antiga.The only caveat here is that ODBC does use an old C-style API.

Etapa 1: Criando seu Banco de Dados SQL do AzureStep 1: Creating your Azure SQL Database

Consulte a página de introdução para aprender a criar um banco de dados de exemplo.See the getting started page to learn how to create a sample database. Como alternativa, você pode seguir este breve vídeo de dois minutos para criar um Banco de Dados SQL do Azure usando o Portal do Azure.Alternatively, you can follow this short two-minute video to create an Azure SQL database using the Azure portal.

Etapa 2: Obter a cadeia de conexãoStep 2: Get connection string

Depois do Banco de Dados SQL do Azure ser configurado, você precisará executar as seguintes etapas para determinar as informações de conexão e adicionar o IP do cliente para acesso ao 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.

No Portal do Azure, vá para a cadeia de conexão ODBC do Banco de Dados SQL do Azure usando Mostrar cadeias de conexão do banco de dados listado como parte da seção de visão geral do banco de dados: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

Copie o conteúdo da cadeia de caracteres ODBC (inclui Node.js) [autenticação do SQL].Copy the contents of the ODBC (Includes Node.js) [SQL authentication] string. Usaremos essa cadeia de caracteres posteriormente para conectar do nosso interpretador de linha de comando ODBC C++.We use this string later to connect from our C++ ODBC command-line interpreter. Essa cadeia de caracteres fornece detalhes como o driver, servidor e outros parâmetros de conexão de banco de dados.This string provides details such as the driver, server, and other database connection parameters.

Etapa 3: Adicionar o IP do firewallStep 3: Add your IP to the firewall

Vá para a seção de firewall para o servidor de Banco de dados e adicione seu IP do cliente ao firewall usando estas etapas para verificar se é possível estabelecer uma conexão bem-sucedida: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

Neste ponto, você configurou seu Banco de Dados SQL do Azure e está pronto para se conectar do código C++.At this point, you have configured your Azure SQL DB and are ready to connect from your C++ code.

Etapa 4: Conectando de um aplicativo Windows C/C++Step 4: Connecting from a Windows C/C++ application

Você pode conectar facilmente ao seu Banco de Dados SQL do Azure usando ODBC no Windows com este exemplo baseado no Visual Studio.You can easily connect to your Azure SQL DB using ODBC on Windows using this sample that builds with Visual Studio. O exemplo implementa um interpretador de linha de comando do ODBC que pode ser usado para conectar ao nosso Banco de Dados SQL do Azure.The sample implements an ODBC command-line interpreter that can be used to connect to our Azure SQL DB. Este exemplo usa o um arquivo DSN ( nome de origem do banco de dados) como um argumento de linha de comando ou cadeia de conexão detalhada copiado previamente no Portal do 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. Abra a página de propriedade para este projeto e cole a cadeia de conexão como um argumento de comando como mostrado aqui:Bring up the property page for this project and paste the connection string as a command argument as shown here:

DSN Propsfile

Verifique se você forneceu os detalhes de autenticação adequados para seu banco de dados como parte dessa cadeia de conexão do banco de dados.Make sure you provide the right authentication details for your database as a part of that database connection string.

Abra o aplicativo e compile-o.Launch the application to build it. Você verá a seguinte janela validando se a conexão foi bem-sucedida.You should see the following window validating a successful connection. Você poderá até mesmo executar alguns comandos básicos do SQL como create table para validar a conectividade do banco de dados:You can even run some basic SQL commands like create table to validate your database connectivity:

Comandos SQL

Como alternativa, você poderia criar um arquivo DSN usando o assistente que é iniciado quando nenhum argumento é fornecido.Alternatively, you could create a DSN file using the wizard that is launched when no command arguments are provided. É recomendável que você também experimente usar essa opção.We recommend that you try this option as well. Você pode usar esse arquivo DSN para automação e para proteger suas configurações de autenticação:You can use this DSN file for automation and protecting your authentication settings:

Criar um arquivo DSN

Parabéns!Congratulations! Agora você se conectou com êxito ao SQL Azure usando o C++ e ODBC no Windows.You have now successfully connected to Azure SQL using C++ and ODBC on Windows. Você pode continuar lendo para fazer o mesmo para a plataforma Linux.You can continue reading to do the same for Linux platform as well.

Etapa 5: Conectando de um aplicativo Linux C/C++Step 5: Connecting from a Linux C/C++ application

Caso ainda saiba, agora o Visual Studio permite que você desenvolva aplicativos C++ Linux também.In case you haven’t heard the news yet, Visual Studio now allows you to develop C++ Linux application as well. Você pode ler sobre esse novo cenário no blog Desenvolvimento em Visual C++ para Linux.You can read about this new scenario in the Visual C++ for Linux Development blog. Para compilar para Linux, você precisa de um computador remoto onde sua distribuição do Linux está sendo executada.To build for Linux, you need a remote machine where your Linux distro is running. Se você não tiver um disponível, poderá definir um rapidamente usando máquinas virtuais Azure Linux.If you don’t have one available, you can set one up quickly using Linux Azure Virtual machines.

Para este tutorial, vamos supor que você tenha uma distribuição do Ubuntu 16.04 Linux configurada.For this tutorial, let us assume that you have an Ubuntu 16.04 Linux distribution set up. As etapas aqui também devem aplicar ao 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.

As etapas a seguir instalam as bibliotecas necessárias para SQL e ODBC para sua distribuição: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*

Inicie o Visual Studio.Launch Visual Studio. Em Ferramentas -> Opções -> Plataforma Cruzada -> C++ -> Gerenciador de Conexões, adicione uma conexão à sua caixa do Linux:Under Tools -> Options -> Cross Platform -> Connection Manager, add a connection to your Linux box:

Opções de Ferramentas

Depois de estabelecer a conexão via SSH, crie um modelo de projeto Vazio (Linux):After connection over SSH is established, create an Empty project (Linux) template:

Novo modelo do projeto

Você pode adicionar um novo arquivo de origem C e substituí-lo por este conteúdo.You can then add a new C source file and replace it with this content. Usando as APIs ODBC SQLAllocHandle, SQLSetConnectAttr e SQLDriverConnect, você deverá poder inicializar e estabelecer uma conexão com o banco de dados.Using the ODBC APIs SQLAllocHandle, SQLSetConnectAttr, and SQLDriverConnect, you should be able to initialize and establish a connection to your database. Como no exemplo do Windows ODBC, você precisará substituir a chamada SQLDriverConnect pelos detalhes dos parâmetros de cadeia de conexão do banco de dados copiados anteriormente no Portal do 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);

A última coisa a fazer antes de compilar é adicionar odbc como uma dependência de biblioteca:The last thing to do before compiling is to add odbc as a library dependency:

Adicionando o ODBC como uma biblioteca de entrada

Para iniciar o aplicativo, abra o Console do Linux no menu Depurar:To launch your application, bring up the Linux Console from the Debug menu:

Console do Linux

Se a conexão for bem-sucedida, agora você verá o nome do banco de dados atual impresso no Console do Linux:If your connection was successful, you should now see the current database name printed in the Linux Console:

Saída da Janela de Console do Linux

Parabéns!Congratulations! Você concluiu com êxito o tutorial e poderá se conectar ao seu Banco de Dados SQL do Azure do C++ em plataformas 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.

Obter a solução completa do tutorial de C/C++Get the complete C/C++ tutorial solution

Você pode encontrar a solução GetStarted que contém todos os exemplos neste artigo no github:You can find the GetStarted solution that contains all the samples in this article at github:

Próximas etapasNext steps

Recursos adicionaisAdditional resources