.NET

16 jan, 2017

.NET Core e SQL Server em Linux: primeiros passos

Publicidade

O objetivo deste artigo é apresentar um exemplo prático de uso do .NET Core e do SQL Server vNext em Linux, fazendo uso para isto do Visual Studio Code, do Yeoman e do utilitário de linha de comando sqlcmd.

E por falar em tecnologias Microsoft, não deixem também de acompanhar o Azure Tech Nights, que acontece de hoje a dia 20 (faça a inscrição através deste link). Será um evento noturno, online e gratuito, promovido pelo Canal .NET, com apresentações focadas no Microsoft Azure e cobrindo temas como microsserviços, desenvolvimento Web e mobile, bancos de dados, Business Intelligence, NoSQL, infraestrutura, containers e muito mais. Entre os palestrantes, teremos evangelistas técnicos Microsoft, MVPs, MTACs, MSPs e especialistas de mercado. A grade com as palestras e outras informações podem ser encontradas no site oficial do Azure Tech Nights.

Introdução

Outrora restritas a ambientes Windows, as tecnologias como .NET e SQL Server agora também possuem versões compatíveis com distribuições Linux. Estas iniciativas constituem parte da estratégia atual da Microsoft em focar outras plataformas operacionais, o que também abre caminho para que profissionais familiarizados com tais soluções ampliarem seus campos de atuação.

No caso do específico .NET Core, esta nova versão da plataforma .NET pode ser utilizada em sistemas operacionais Windows, Linux e Mac. É importante destacar ainda o suporte do novo .NET a containers Docker, o que expande ainda mais os cenários para adoção desta tecnologia.

Já o SQL Server vNext corresponde à nova plataforma de dados da Microsoft (ainda Preview), contemplando agora também a possibilidade de uso de seu SGBD em ambientes Linux e containers Docker.

As próximas seções trazem um exemplo simples de utilização do .NET e do SQL Server em Linux, com isto acontecendo através da implementação de uma Console Application (criada via Yeoman) no Visual Studio Code.

Configurando o ambiente de desenvolvimento

No exemplo apresentado neste artigo foi utilizada a versão 16.04 do Ubuntu Desktop, com a criação de uma máquina virtual no Hyper-V em um computador executando o Windows 10 Professional. Nesta VM foram instalados ainda o .NET Core 1.1, o SQL Server vNext, o Visual Studio Code e o Yeoman.

Para maiores detalhes sobre como configurar este ambiente de desenvolvimento, consulte o seguinte artigo: ASP.NET Core: criando uma aplicação Web em Linux. E também a documentação sobre a configuração e uso do SQL Server em Linux: SQL Server on Linux Documentation.

Criando a base de dados para testes

Para os testes com o .NET Core será criada uma base no SQL Server chamada ExemploPaises. Este banco de dados contará com uma tabela chamada Paises, a qual armazenará o nome de um país, sua sigla de identificação e código telefônico correspondente.

Segue o script para a geração destas estruturas:

CREATE DATABASE ExemploPaises;
GO

USE ExemploPaises;
GO

CREATE TABLE dbo.Paises(
    Sigla char(3) NOT NULL,
    NomePais varchar(50) NOT NULL,
    CodigoTelefonico varchar(4) NOT NULL,
    CONSTRAINT PK_Paises PRIMARY KEY (Sigla)
);
GO


INSERT INTO dbo.Paises
           (Sigla
           ,NomePais
           ,CodigoTelefonico)
     VALUES
           ('EUA'
           ,'Estados Unidos da América'
           ,'+1');
GO

INSERT INTO dbo.Paises
           (Sigla
           ,NomePais
           ,CodigoTelefonico)
     VALUES
           ('GER'
           ,'Alemanha'
           ,'+49');
GO

INSERT INTO dbo.Paises
           (Sigla
           ,NomePais
           ,CodigoTelefonico)
     VALUES
           ('BRA'
           ,'Brasil'
           ,'+55');
GO

INSERT INTO dbo.Paises
           (Sigla
           ,NomePais
           ,CodigoTelefonico)
     VALUES
           ('UAE'
           ,'Emirados Árabes Unidos'
           ,'+971');
GO

Para executar um arquivo contendo estas instruções será empregado o utilitário sqlcmd (que conta com uma versão para Linux), através da seguinte linha de comando em um Terminal Linux:

sqlcmd -S SERVIDOR -U USUÁRIO -P SENHA -i ARQUIVO

Em que -S corresponde ao servidor no qual se efetuará a conexão (localhost), -U ao usuário para acesso ao servidor SQL Server (SA), -P indica a senha desta credencial e -i especifica um arquivo de input (ScriptPaises.sql) contendo instruções SQL a serem executadas pelo sqlcmd.

O resultado desta ação pode ser observado na próxima imagem:

Para se conectar à base ExemploPaises e consultar os dados de países, utilize uma linha de comando quase idêntica àquela descrita no passo anterior, omitindo apenas a indicação do arquivo de input:

sqlcmd -S SERVIDOR -U USUÁRIO -P SENHA

E digite as seguintes instruções:

USE ExemploPaises;
GO

SELECT * FROM dbo.Paises;
GO

Serão exibidos, então, os registros inseridos na tabela dbo.Paises:

Implementado a aplicação

Para iniciar a criação do projeto de testes, execute a seguinte linha de comando em no Terminal:

yo aspnet

O Yeoman apresentará então uma lista de templates; selecione a opção Console Application e confirme:

Encerre este processo informando como nome da aplicação o valor TesteNETCoreSQL:

Um aviso similar ao da próxima janela aparecerá, caso o novo projeto seja criado com sucesso:

Acessar agora o diretório TesteNETCoreSQL, executando o comando a seguir para restaurar as dependências da aplicação:

dotnet restore

O resultado desta ação pode ser visualizado na próxima imagem:

Esta aplicação exibirá os dados de países cadastrados na base de testes. Para ter acesso ao conteúdo do projeto no Visual Studio Code, digite no Terminal, ainda no diretório TesteNETCoreSQL, o seguinte comando:

code .

O Visual Studio Code será então exibido. Clicar no painel esquerdo deste utilitário sobre o arquivo project.json, de forma a exibir as configurações do projeto:

No item dependencies de project.json, inclua a biblioteca System.Data.SqlClient (driver ADO.NET para uso do SQL Server):

E indique também a versão (4.3.0) deste pacote:

Salve, então, as alterações realizadas em project.json, clicando para isto na opção Restore, que aparecerá na mensagem de alerta exibida a seguir:

A classe Program também deverá ser alterada, de forma a exibir as informações armazenadas na tabela dbo.Paises. Este acesso acontecerá empregando instâncias das classes SqlConnection, SqlCommand e SqlDataReader (todas estas pertencentes ao namespace System.Data.SqlClient):

using System;
using System.Data.SqlClient;

namespace TesteNETCoreSQL
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Relação de países e códigos telefônicos\n");
            
            string connectionString =
                "Data Source=localhost;" +
                "Initial Catalog=ExemploPaises;" +
                "User ID=SA;" +
                "Password=UbuntuSQL2016;";
            
            using (SqlConnection conexao =
                new SqlConnection(connectionString))
            {
                SqlCommand cmd = conexao.CreateCommand();
                cmd.CommandText =
                    "SELECT Sigla, NomePais, CodigoTelefonico " +
                    "FROM dbo.Paises " +
                    "ORDER BY Sigla";
                
                conexao.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                   Console.WriteLine(
                       quot;{reader["CodigoTelefonico"]} {reader["NomePais"]} ({reader["Sigla"]})");
                }

                conexao.Close();
            }

            Console.WriteLine("\nTérmino da aplicação TesteNETCoreSQL");
        }
    }
}

Testes

Voltando ao Terminal, execute a seguinte instrução para compilar a aplicação (a partir do diretório TesteNETCoreSQL):

dotnet build

E para iniciar a aplicação utilize o comando:

dotnet run

O resultado da execução do projeto TesteNETCoreSQL pode ser observado na próxima imagem:

Conclusão

Desenvolvedores familiarizados com o .NET e o SQL Server não encontrarão dificuldades em utilizar estas tecnologias em ambientes Linux. Muitas melhorias ainda devem ser incorporadas ao .NET Core e ao SQL Server vNext, fato este que contribuirá para o crescimento na adoção destas soluções em projetos voltados às mais variadas finalidades.

Referências