Junho de 2017

Volume 32 - Número 6

Pontos de Dados - Visual Studio Code: Criar um IDE de Banco de Dados com a Extensão MSSQL

Por Julie Lerman | junho de 2017

Julie LermanApesar de o Visual Studio ainda ser meu IDE obrigatório para desenvolvimentos pesados em .NET, eu me apaixonei pelo Visual Studio Code (VS Code), seja para trabalhar em C#, JavaScript, Node ou para trabalhar em Windows ou em macOS. Certamente, existem muitas outras linguagens e estruturas suportadas pelo VS Code e suas inúmeras extensões, mas esses são meus conjuntos de ferramentas atuais. Mas eu não estou sozinho no meu amor pelo VS Code. Durante o lançamento do Visual Studio 2017 em março de 2017, a Microsoft anunciou que o VS Code tinha 1,3 milhão de usuários mensais. O que é realmente fantástico é que, como em qualquer ferramenta multiplataformas, todos os membros de sua equipe podem usar seu SO preferido usando as mesmas ferramentas de codificação.

E então temos os dados — os dados estão sempre envolvidos na história. Passei anos e anos trabalhando somente com o SQL Server e codificando aplicativos do Windows. Mas, nos últimos anos, expandi meus horizontes — não só com o novo IDE (VS Code), mas também com os novos bancos de dados e novas plataformas (enquanto eu digito isto em meu MacBook Pro).

Minha incursão no VS Code começou quando comecei a explorar o Node.js, o que você já pôde verificar neste artigo. Isso estava originalmente no Windows. Mas porque o VS Code é compatível com várias plataformas (compilado com o Electron), eu acabei andando para trás e para frente, trabalhando no mesmo código, às vezes no Windows, às vezes no macOS com o GitHub como o denominador comum. Graças à extensão C# e a natureza multiplataforma do .NET Core, eu acabei por ir além do Node.js para escrever aplicativos do .NET Core com o EF Core nos dois ambientes. Quando estou no Visual Studio, eu confio muito nas Ferramentas de Cliente do SQL Server e na extensão da Caixa de ferramentas do SQL CE/SQLite para explorar a maioria dos dados que os meus aplicativos estão criando. Mas com o VS Code, eu preciso de algo externo para explorar os dados. Ao usar o Windows e o VS Code superleve, nunca me pareceu uma boa ideia abrir o SQL Server Management Studio, que é tudo menos leve. Para outros bancos de dados, seja nas minhas caixas do Windows ou do Mac, eu também tenho usado o JetBrains DataGrip (jetbrains.com/datagrip), uma ferramenta de banco de dados multiplataforma que suporta vários bancos de dados.

Mas com o crescimento do universo das extensões para VS Code (para pouco menos de 3.000 até a data em que escrevi este artigo em abril de 2017), surgiram várias extensões para interagir com armazenamento de dados. Duas com as quais eu já trabalhei são a extensão mssql (bit.ly/2gb2ICf), da equipe do SQL Server, e a extensão de bancos de dados vscode para SQLite e PostgreSQL (bit.ly/2mh8nYF). Elas permitem que você escreva e execute o SQL contra seus bancos de dados. Você pode ver demonstrações de ambas no meu curso da Pluralsight, “Núcleo da Estrutura de Entidades: Introdução”. Também existem outras extensões relacionadas a dados, por exemplo, para interagir com os dados do Azure Data Lake (também da Microsoft), Redis e Salesforce. Algumas delas ainda estão em versão prévia, incluindo a extensão mssql.

Neste artigo, vou mostrar algumas noções básicas de como usar a extensão mssql. Originalmente, planejei escrever sobre o mssql e o banco de dados do vscode, mas o mssql tem tantas funcionalidades que acabei gastando todo o meu limite de palavras para este artigo me divertindo com elas. Não faz diferença se você usar o mssql no Windows, macOS ou Linux.

A extensão mssql permite que você interaja com vários bancos de dados do SQL Server: Microsoft SQL Server, Azure SQL Database e SQL Data Warehouse. Como estou sentado em frente de um MacBook, vou me conectar a um SQL Server externo. Você já deve estar sabendo que o SQL Server agora também funciona em Linux, não é maravilhoso? Isso significa que eu poderia acelerar um contêiner Docker que executa o SQL Server. Eu não farei isso para este artigo, mas eu escrevi um uma postagem no blog sobre isso, que pode ser lida em bit.ly/2qaev9r. No entanto, o que eu farei é conectar um banco de dados do Azure SQL Server na nuvem. Este é um poderoso lembrete que você não precisa ser um desenvolvedor Windows, um admin ou um desenvolvedor C# para tirar proveito do SQL Server. Você pode gerenciá-lo no portal do Azure e conectar-se com ele a partir de qualquer tipo de aplicativo. Por isso, imagine que seu aplicativo é PHP e você está usando a extensão PHP para o VS Code e dialogando com um banco de dados do SQL Server no Azure. 

Eu aproveitei a conta gratuita do Azure e os créditos que vêm com a assinatura do Visual Studio para criar um banco de dados Azure SQL na amostra do AdventureWorks. A documentação que explica como fazer isso está em bit.ly/2o2IDTy.

Voltando ao VS Code, você pode instalar a extensão do mssql clicando no ícone de extensão na Barra de Atividade do VS Code, filtrando no mssql e, depois, clicando em seu botão Instalar. Você será solicitado a recarregar o VS Code quando estiver pronto, mas lembre-se que isso atrasará a instalação de uma parte da extensão até que você use um de seus comandos. Observe que para o macOS, você precisará instalar o OpenSSL. Para mais detalhes, verifique o link da documentação do mssql (fornecido anteriormente).

Além do mecanismo de execução de consultas que foi instalado, o mssql coloca vários comandos na paleta de comandos do VS Code. Faz sentido começar se conectando ao seu banco de dados, embora outras funções solicitarão que você se conecte caso ainda não o tenha feito.

Abra a paleta com F1 (ou Ctrl ou Command+Shift+P se você tiver um desses teclados esquisitos sem teclas de função) e digite MS SQL para filtrar todos os comandos mssql. Se você não tiver nenhuma outra extensão que fornece comandos com a palavra-chave do SQL, só o SQL é suficiente. Eu adoro o fato de ser possível ir até os arquivos de ajuda com o comando do Guia de Introdução. Também é possível armazenar conexões diferentes e, em seguida, conectar-se facilmente com a funcionalidade Gerenciar Perfis de Conexão.

A maneira mais fácil de interagir com o mssql é ter um arquivo aberto para edição e garantir que o VS Code sabe que você está editando o SQL. Você pode fazer isso se tiver uma pasta ou projeto aberto graças ao comando de consulta Novo. Isso criará um arquivo SQLQuery.sql e a extensão sql fará com que o VS Code mude para o editor mssql. O editor atual fica anotado no canto inferior direito do VS Code, e isso muda com base nas extensões do arquivo para oferecer a você IntelliSense e outras funcionalidades relevantes disponibilizadas pela extensão. Você pode clicar no que for exibido para alterar isso, se necessário. O editor de mssql não só ajudará você a escrever em TSQL, como também sabe como executar consultas e realizar outras tarefas definidas pela extensão.

Com um arquivo aberto SQL no editor e selecionando o MS SQL: Conectar-se a partir da paleta de comandos e exibirá uma lista de perfis de conexão existentes que você já criou e permitirá que você crie uma nova. Selecione a opção Criar Perfil de Conexão, que solicitará todos os elementos-chave da cadeia de conexão. Por exemplo, a primeira solicitação pergunta o nome do Servidor, como mostrado na Figura 1. Meu banco de dados do SQL Azure está em um servidor chamado thedatafarmsqlerver.database.windows.net, então é isso que eu digitarei.

Conectando-se a um Banco de Dados SQL com a extensão mssql
Figura 1 Conectando-se a um Banco de Dados SQL com a extensão mssql

Em seguida, você deverá digitar o nome de seu banco de dados, seu logon e senha, em seguida, deverá fornecer um nome de perfil adicional. Aliás, a opção Gerenciar Perfis de Conexão também pode levar você até esse ponto, pois tem uma opção de menu Criar.

Depois de preencher as informações de conexão e estiver devidamente conectado, o perfil ficará salvo no arquivo de configurações do VS Code. Com a versão 0.3, se a conexão falhar, o perfil não será armazenado, mas essa experiência está prestes a mudar. Você pode ver o perfil armazenado indo até Preferências e Configurações no menu do VS Code ou usando a combinação de teclas (vírgula) Crtl ou Command+. Aqui está um exemplo de perfil de conexão:

"mssql.connections": [
  {
    "authenticationType": "SqlLogin",
    "server": "thedatafarmsqlserver.database.windows.net",
    "database": "AdventureWorksSample",
    "user": "me",
    "password": "mypassword",
    "savePassword": true,
    "profileName": "AzureAWSample"}
  }
]

Com perfis armazenados nas configurações, você tem a opção de selecionar o AzureAWSample ou outros perfis armazenados quando quiser se conectar.

Quando estiver conectado, você pode começar a escrever e executar o TSQL. A maneira mais fácil de fazer isso é ter um arquivo com a extensão SQL aberta no editor. Como eu mencionei, isso força o arranque das funcionalidades do editor SQL e uma de suas maravilhosas funcionalidades são os trechos de código TSQL internos.

Comece digitando sql na janela do editor e o IntelliSense exibirá a lista de trechos de código internos, como mostrado na Figura 2.

Trechos de código TSQL fornecidos pela extensão mssql
Figura 2 Trechos de código TSQL fornecidos pela extensão mssql

Você pode observar que isto não está limitado apenas à consulta dos dados existentes — o mssql executará qualquer TSQL (válido ou permitido). Eu gosto de listar os bancos de dados ou tabelas e exibições de um banco de dados selecionado para verificar que eu me conectei ao banco de dados correto, e o trecho de código ListTablesAndViews é ótimo para isso. Normalmente, eu tenho que pedir ao Dr. GoogleBing para me ajudar com um TSQL deste tipo, por isso eu sou tão grato por esse trecho de código.

Pressionar Ctrl ou Command+Shift+E executará o comando. Você também pode selecionar o texto e clicar com o botão direito do mouse no menu de contexto, que inclui uma opção Executar.

Um painel de resultados se abre com a resposta tal como o exemplo na Figura 3.

Resultados de uma consulta de esquema
Figura 3 Resultados de uma consulta de esquema

Na parte superior direita, repare que existem dois ícones pequenos. O primeiro permite que você salve os resultados como em um arquivo de texto CSV. O segundo é para salvar os resultados como JSON. Vamos fazer uma consulta que obtém os dados do Cliente, ver como são esses resultados e, então, salvá-los em JSON. Com a lista de tabelas na minha frente, eu posso começar a digitar minha consulta e, como mostra a Figura 4, o IntelliSense entra em ação com o conhecimento do esquema do banco de dados.

O IntelliSense lê o esquema e ajuda a compilar o TSQL
Figura 4 O IntelliSense lê o esquema e ajuda a compilar o TSQL

Eu modifiquei minha instrução para obter três colunas do Sales­LT.Customer. Em seguida, consegui destacar a instrução e usar o atalho de teclado Ctrl ou Command+Shift+E novamente para executar somente essa consulta. Como com o Management Studio do SQL Server, eu posso executar uma ou mais instruções e, em resposta, ver um ou mais conjuntos de resultados.

Os resultados são apresentados em uma grade conforme mostrado na Figura 5. Você pode destacar uma ou mais combinações de linha e coluna e, em seguida, clicar nos ícones CSV ou JSON, que solicitarão a você um nome de arquivo para salvar estas combinações. E você pode facilmente selecionar todos os dados de um menu de contexto clicando na grade com o botão direito do mouse.

Resultados de uma consulta de dados de cliente
Figura 5 Resultados de uma consulta de dados de cliente

O prompt do filename exibe o caminho da pasta atual. Se é ali que você deseja salvar o arquivo, você não precisa reescrever o caminho. Basta digitar o nome do arquivo e ele será salvo nessa pasta. Eu não percebi isso nas primeiras vezes, por isso, aprenda com os meus erros.

Selecionei apenas a primeira linha dos dados do cliente que a minha consulta projetou, e então usei o ícone Salvar para do JSON, especificando um nome de arquivo. Aqui está JSON que resultou do meu arquivo:

[
  {
    "CustomerID": "1",
    "FirstName": "Orlando",
    "LastName": "Gee"
  }
]

Lembre-se que você pode facilmente adicionar seus próprios trechos de código ao VS Code. Vamos criar um para listar procedimentos e funções armazenados. Comece indo para Preferências e Trechos do Usuário. Você verá que a extensão mssql adicionou um modelo para trechos SQL. Selecione isso e o modelo em branco abrirá. Ao adicionar mais trechos, continuarei a trabalhar neste arquivo. Além disso, se você criou alguns trechos para compartilhar (ou talvez encontre um bug ou tenha outra ideia para mssql), esta é uma extensão de código-fonte aberta, e você pode deixar contribuir com ela acessando github.com/Microsoft/vscode-mssql para enviar solicitações pull ou problemas.

Depois de uma longa sessão com o Dr. GoogleBing e testar várias ideias, aqui está o trecho que eu criei para listar todos os procedimentos e funções armazenados no banco de dados de destino:

"List Stored Procedures": {
  "prefix": "sqlListStoredProcedures",
  "body": [
    "SELECT [Name],[Type_Desc] " ,
    "FROM [sys].[all_objects] " ,
    "WHERE ([Type] = 'P' OR [Type]='FN' OR [Type]='TF' OR [Type]='IF') ",
    "AND [Is_MS_Shipped] = 0"
  ],
  "description": "List Stored Procedures"
}

Agora, quando eu digito sql na janela do editor, sqlListStoreProcedures está entre as opções. Os resultados de executar esse comando contra meu banco de dados de destino são:

Name                         Type_Desc
uspPrintError                SQL_STORED_PROCEDURE
uspLogError                  SQL_STORED_PROCEDURE
ufnGetAllCategories          SQL_TABLE_VALUED_FUNCTION
ufnGetSalesOrderStatusText   SQL_SCALAR_FUNCTION
ufnGetCustomerInformation    SQL_INLINE_TABLE_VALUED_FUNCTION

Consegui compartilhar este resultado clicando com o botão direito do mouse nos resultados e selecionando sua opção “Copiar com cabeçalhos”.

Mas como dizem os anúncios de TV da madrugada, “Mas espere! Ainda tem mais!” A janela do editor também tem um menu de contexto (veja a Figura 6).

Menu de contexto da janela do editor
Figura 6 Menu de contexto da janela do editor

Os itens mais interessantes nele (na minha humilde opinião) são o Ir para Definição e o Inspecionar Definição. Se você selecionar um nome de tabela na janela de edição, por exemplo, o Cliente no comando mostrado na Figura 5, esses comandos mostrarão a você o script CREATE para a tabela de cliente.

A extensão mssql está constantemente evoluindo e estou ansioso para ver as futuras atualizações. A versão 0.3.0 que eu compartilhei aqui ainda é uma prévia. Se você a tem instalada no Visual Studio Code, você receberá notificações de atualização. Você pode assistir e participar de sua evolução no seu site do GitHub em aka.ms/mssql-marketplace.


Julie Lerman é Diretora Regional da Microsoft, MVP da Microsoft, mentora e consultora de equipes de software e reside nas colinas de Vermont. Você pode encontrá-la em apresentações sobre acesso de dados ou sobre outros tópicos em grupos de usuários e conferências em todo o mundo. Ela escreve no blog thedatafarm.com/blog e é autora do "Programming Entity Framework", bem como de uma edição do Code First e do DbContext, todos da O'Reilly Media. Siga-a no Twitter em @julielerman e confira seus cursos da Pluralsight em juliel.me/PS-Videos.

Agradecemos aos seguintes especialistas técnicos da Microsoft pela revisão deste artigo: Kevin Cunnane, Eric Kang e Sanjay Nagamangalam